mpvue提供了vue的语法编译为小程序的能力,可是仍是有些局限,不过能作到跟vue差很少已经很不错了。css
我在项目中按照vue初始化 store 的时候,本觉得能像vue里正常使用vuex的一些功能,发现报错 TypeError: Cannot read property 'state' of undefined
,一会儿懵逼了,在pages的页面里打印 this
对象,发现并没 $store
属性,也就是说mpvue对store并无初始化成功,苦瓜脸...html
百度中... 不负有心人~~~vue
缘由以下:web
mpvue使用上,vuex和以往相似,不一样的是,小程序以多页形式渲染,故每一个页面都须要建立vue实例并引入相应的store模块,入口配置大概以下:vuex
import Vue from 'vue'; import Vuex from 'vuex'; import store from './store'; import App from './index'; Vue.use(Vuex); const app = new Vue({ ...App, store }); app.$mount();
注意:是每一个页面都要初始化渲染... (很麻烦的感受)json
亲测可用,终于能够起飞了~~~canvas
分享的页面若是须要参数就必定要传参,而且path要写app.json中所配置的绝对路径小程序
在作小程序分享这部分的时候,一开始常常会遇到页面不存在的状况,后面才发觉通常遇到这种状况都是由于使用 onShareAppMessage()
方法时path没有写对,这时只须要将app.json中配置该页面的路径直接复制过来就好啦!微信小程序
// app.json { "pages":[ "pages/test/test" // ① ] } // test.js onShareAppMessage: function () { return { title: '自定义转发标题', path: 'pages/test/test?id=123', //此处所写路径与 ① 处相同,若页面需传参数,记得把参数带上 } },
而后分享后的页面打开,在onLoad(opt)
函数里面,经过 opt.id
便可获取到传入的参数值。若是其它函数里用到的话,可经过this.$root.$mp.query.id
获取api
我转发后,去转发的手机点开,感受老是没有变化,无论怎么改,改来改去,改去改来,仍是上一次的数据或者返回结果。屡次测试才知道,转发后的页面,也须要先扫一下微信开发者工具,更新到最新代码才能够。(如今的小程序已经有分享提示了,提示要求保证要分享的手机也是最新的开发代码)
小程序实现通知推送,能够经过点击表单生成一个formId,还有一个支付方法,生成订单。发给后台,可实现通知推送。可是,若是实现点击一次,就新建出多条通知呢(生成多个formId)。。。
暂时没有比较好的解决方案,采用这篇文章里的方案。。。解决小程序点击一次,提交多个表单,获取多个formId的方法
pages/xxx/xxx.js 出现脚本错误或者未正确调用 Page()
出现这个错误是由于你尚未写js,也就是js里面是空的,
首先看下你的vue文件,是否是空文件,通常新建的时候,都是空文件,而后也会报错误,而后看下 main.js里的文件是否是写入js
再者,修改src文件的 main.js时,须要重启服务
而后刷新就好啦
还没效果,重启微信开发者工具,就能够了
其实这个问题本质就是页面或者js错误
我以前用...mapStates()
获取数据的时候,没有加中括号,好比...mapStates('openid')
,这样也会报这个错误
小程序引用本地资源图片文件,编译后路径显示 -do-not-use-local-path-
,调试很久,本地图片就是不显示
小程序官方文档说明:本地资源没法经过 WXSS 获取
background-image:可使用网络图片,或者 base64,或者使用<image/>标签
https://developers.weixin.qq.com/miniprogram/dev/qa.html
本身一开始用css的overflow-x:auto
,能够实现滚动,可是却不能用原生js,document.getElementById['a'].scrollLeft
去设置滚动距离了
而后使用看了下文档,发现有 scroll-view
组件,直接拿来用,用文档的scroll-left
定位 写法发现怎么也不能定位到特定位置
而后搜了一圈是发现本身的样式写的有问题,必须用下面的写法。。。
<scroll-view scroll-x class="scroll-header" scroll-left="200"> <view id="green" class="scroll-view-item bc_green"></view> <view id="red" class="scroll-view-item bc_red"></view> <view id="yellow" class="scroll-view-item bc_yellow"></view> <view id="blue" class="scroll-view-item bc_blue"></view> <view id="blue" class="scroll-view-item bc_blue"></view> <view id="blue" class="scroll-view-item bc_blue"></view> <view id="blue" class="scroll-view-item bc_blue"></view> <view id="blue" class="scroll-view-item bc_blue"></view> </scroll-view> <style lang="scss"> .scroll-header { //width: 1000rpx; //注意:不能加宽度!!!不然会失效 display: flex; white-space: nowrap; //很重要 view { height: 128rpx; width: 128rpx; border: 1px solid red; display: inline-block; //很重要 } } .bc_green{ background: green } .bc_red{ background: red } .bc_blue{ background: blue } .bc_yellow{ background: yellow } </style>
而后看了下本身的代码,分享按钮在子组件里, at page XXX , XXX是本身组件的父级,
也就是说 onShareAppMessage()
分享函数,不能再子组件去触发父级的分享。。。
把 onShareAppMessage
放在父级就好啦
划重点!!!!
根据这篇文章https://www.cnblogs.com/huangjialin/p/6278429.html
把tab1设置为首页,哇塞,直接出来三个底部导航了~~~~
在某些业务需求下,我须要先显示首页,好比我首页是index,tabBar是 tab1,tab2,tab3,可是发现之前的 navigator跳转失灵了!!!
可是,我就是想让index在首页怎么办!!!
open-type
设置为switchTab
可跳转到 tabBar页面!!!<navigator open-type="switchTab" url="/pages/tab1/main"> .... </navigator>
完美~~~
如今须要作一个图片处理的功能 可是又不须要canvas显示在页面上,
我尝试了不少隐藏的方法 结果都是两种:
解决方案: 把canvas定位到了屏幕外
生成小程序分享卡片的图片,这个地方有不少坑.... 坑。。。。 坑oooo
1. canvas 画完图后,使用canvasToTempFilePath
生成的图片都是透明图。
咱们都知道小程序分享卡片上的图片,须要传一个imageUrl参数,可是咱们须要将动态数据展现到图片上,因此,就须要canvas画图生成一张图片地址。
因此,ctx.draw()
以后,使用 wx.canvasToTempFilePath()
导出的图片地址是透明的。
小程序文档里加了一条bug,tips说明 canvasToTempFilePath
Bug & Tip
tip: 在 draw 回调里调用该方法才能保证图片导出成功。
因此应采用
ctx.draw(false, ()=>{ wx.canvasToTempFilePath({ x: 0, y: 0, width: canvasW, height: canvasH, destWidth: canvasW, destHeight: canvasH, canvasId: 'myCanvas', success: (res)=> { // console.log(res.tempFilePath) this.sharePic = res.tempFilePath }, }) });
2. 生成图片路径能够了,可是生成的图片,微信开发者工具能够看到,可是手机上并不显示
因为小程序的 Canvas 没法直接使用网络图片进行绘制,因此当咱们须要使用一个图片资源时,应该先使用 wx.getImageInfo 去获取该资源的临时文件。
而后再把返回的临时图片地址,用做canvas绘图的参数地址
3. canvas 绘制圆形头像问题,(这个算是本身挖的坑,对canvas不太熟悉)
//设置头像 ctx.save(); //保存以前的绘制环境 ctx.arc(transitionPX(133),transitionPX(511), headSize/2, 0, 2*Math.PI); //参数必定要写全,否则会致使手机显示问题 ctx.clip(); //剪切某个区域, 使得后面绘制的都在 arc里面 ctx.drawImage(avatarUrl, transitionPX(70), transitionPX(448), headSize, headSize); ctx.restore() //恢复以前的绘图环境,否则之后绘制的都不显示,相似 overflow:hidden效果
4. canvas生成的图片分享后显示很模糊
没想到吧,哈哈哈哈,仍是有问题,一步一坑,挖一路填一路。
canvas画图是多大就是多大,可是手机的屏幕设备的像素比如今通常都是超过2的。因此咱们须要导出更大的图片,就是基于之前写的宽高,乘以手机像素便可
先用 getSystemInfo
获取当前设备的分辨率 pixelRatio
,而后再将以前导出的宽高 乘以 pixelRatio
分享后图片显示就清楚不少啦
wx.canvasToTempFilePath({ ... destWidth: canvasW*this.pixelRatio, destHeight: canvasH*this.pixelRatio, ... })
我点击小程序的一个按钮跳转到另外一个小程序,部分代码以下,可是点击后提示 该功能没法使用 请返回使用该小程序其余功能
<navigator target="miniProgram" app-id="abcdefg" path="/pages/xxx/index" hover-class="none"> <div class="pay fl tac" @tap="to"> 付费学:¥199 </div> </navigator>
加上版本说明 version="release"
当target="miniProgram"时有效,要打开的小程序版本,有效值
develop(开发版),trial(体验版),release(正式版),仅在当前小程序为开发版或体验版时此参数有效;若是当前小程序是正式版,则打开的小程序一定是正式版。
当你没有要跳转的小程序的体验权限时,开发版本测试version="trial"
的时候,会提示你无改小程序体验权限。
上线使用 version="release"
便可
downloadFile 合法域名校验出错
https://wx.qlogo.cn 不在如下 downloadFile 合法域名列表中,请参考文档: https://mp.weixin.qq.com/debu...
这个也是canvas画图, wx.getImageInfo
须要吧头像转成小程序的临时文件 的时候出的问题。
关掉微信开发者工具,不校验合法域名、web-view(业务域名)、TLS 版本以及 HTTPS 证书 就会出现这个问题。
真机还会出现 getImageInfo
错误...
解决方案:登陆小程序后台管理。在 设置->开发设置->服务器域名 ,把刚刚报错是域名添加进去,而后从新编译一下代码,从新运行就能够了
showModal
内容如何左对齐小程序文档里并无针对文本对齐方式的设置,因此设置多段文字的时候,采用 \r\n
换行后,最后一行的文本都是居中状态影响美观,因此要对全部文本左对齐,办法仍是有的,就是添加空格,做为文本去填充内容。代码以下
wx.showModal({ title: '规则说明', content: `学习:课程为闯关模式,学完一课,次日自动解锁下一课,天天最多学习一节课哦~ \t\t\t\t\t\t\t\t\t\t\t \r\n打卡:完成当日学习后,将学习报告分享至宝妈群,即为打卡成功!仅当日分享有效哦~ \t\t\t\t\t\t\t\t\t\t\t \r\n连续打卡12天,便可免费领取神秘大奖 \t\t\t\t\t\t\t\t\t\t\t `, showCancel: false, confirmText: '知道啦', success: function(res) { if (res.confirm) { console.log('用户点击肯定') } else if (res.cancel) { console.log('用户点击取消') } } })
注意一点: \t\t\t\t\t\t\t\t\t\t\t \r\n
,\t
和\r\n
之间要添加 空格,否则在安卓机会有换行换不了或者文本之间换行等显示问题。
navagator
组件须要2.07以上基础库支持,因此当你的微信版本太低,所支持的基础库也就低,致使跳转无效。
解决方案: 在微信公众平台设置->基本设置-> 基础库最低版本设置 ,设置线上最低版本库为组件所支持的最低版本。
已中止更新,小程序产品迭代较快,建议多看文档,多去社区参考~