mpvue-小程序之蹲坑记
1. 不支持
v-html
- 小程序里所有的 BOM/DOM 都不能用,也就是说 v-html 指令不能用
部分复杂的 JavaScript 渲染表达式
- {{}} 双花括号的部分,直接编码到 wxml 文件中,小程序能力限制
- 小程序支持运算
- 三元运算
- 算数运算
- 逻辑判断
- 字符串运算 (+连接等)
过滤器
template 中使用 methods 中的函数
vuex mapState、mapGetters
- vuex辅助函数mapState、mapGetters不可用
Vue.prototype.$store = store
子组件可通过this.$store
使用
2. 规范
2.1. 变量绑定
使用 vue.js 规范
<!-- 小程序 -->
<view class="tab-item {{currentTab==0 ? 'on' : ''}}" >超然haha</view>
<view current="{{currentTab}}" style="height:{{currentTab==1?Height+'rpx':'100%'}}">超然haha</view>
<!-- vue.js -->
<view class="tab-item" :class="{'on': currentTab==0 ? true : false}" >超然haha</view>
<view :current="currentTab" :style="{'height':currentTab==1 ? Height+'rpx':'100%'}">超然haha</view>
2.1. 事件处理
小程序原生事件 ---> vue.js 规范
列表中没有的原生事件也可以使用例如
bindregionchange
事件直接在dom
上将bind
改为@@regionchange
,在监听此类事件的时候同时监听事件名和事件类型既<map @regionchange="functionName" @end="functionName" @begin="functionName"><map>
不支持组件引用时原生事件
关于修饰符
- .stop 的使用会阻止冒泡,但是同时绑定了一个非冒泡事件,会导致该元素上的 catchEventName 失效!
- .prevent 可以直接干掉,因为小程序里没有什么默认事件,比如submit并不会跳转页面
- .capture 支持 1.0.9
- .self 没有可以判断的标识
- .once 也不能做,因为小程序没有 removeEventListener, 虽然可以直接在 handleProxy 中处理,但非常的不优雅,违背了原意,暂不考虑
3. 组件
3.1. 限制
- 只能使用单文件组件(.vue 组件)的形式进行支持
- 其他的诸如:动态组件,自定义 render,和
<script type="text/x-template">
字符串模版等都不支持
- 其他的诸如:动态组件,自定义 render,和
- 组件上定义原生事件
- v-show---》v-if
- slot
- 动态组件
- 异步组件
- inline-template
- X-Templates
- keep-alive
- transition
- class
- style
3.1.1. vuex 的支持
- vuex和以往类似,不同的是,小程序以多页形式渲染,故每个页面都需要创建vue实例并引入相应的store模块
- 在main.js中引入你的store, 并绑定到Vue构造函数的原型上,这样在每个.vue的组件都可以通过this.$store访问store对象
- 无法使用它的辅助函数 mapState、 mapGetters、 mapActions、 mapMutations 等
- 用最原始的 store.commit()、 store.getter
3.2. 小程序组件使用
- 原生组件的事件绑定需用vue语法
4. 参数获取
page onLoad 时候传递的 options
this.$root.$mp.query
- 也可以通过 onLoad 方法
app onLaunch/onShow 的参数
this.$root.$mp.appOptions
5. 生命周期问题
mpvue 是兼容微信小程序的生命周期与 vue 的生命周期,vue 实例会接管小程序 Page 实例的生命钩子,因此需要使用到小程序的生命周期钩子时,可将相应的钩子方法定义在 vue 实例中
如定义当前Page的分享标题内容图片:
new Vue({
data () {
return {
score: ''
}
},
onShareAppMessage (res) {
return {
title: '我获得 ' + this.score + ' 分,快来一起掌握基础音阶知识吧!',
path: '/pages/index/index',
imageUrl: 'https://wechat.dddog.com.cn/static/wescale.jpg'
}
}
})
小程序踩坑记
1. 组件
input, map, canvas, video, live-player,camera , textarea
是由客户端创建的原生组件,层级最高,z-index 没用
而其它组件都是基于Web Component规范实现的Custom Element,而诸如picker弹出选择器行为,navigator跳转行为,都是基于微信原生提供的能力,理解为调用wx.xxxApi
微信小程序的组件是否都是原生实现的,类似React Native?
No,小程序视图层仍然依赖于Webview,只有部分组件是原生组件,用来解决Mobile Web体验问题。目前原生组件包括:
input,textarea,video,map,canvas
- tip: input 组件是一个 native 组件,字体是系统字体,所以无法设置 font-family;
- tip: textarea 组件是由客户端创建的原生组件,它的层级是最高的。
- tip: video 组件是由客户端创建的原生组件,它的层级是最高的。
- tip: map 组件是由客户端创建的原生组件,它的层级是最高的。
- tip: canvas 组件是由客户端创建的原生组件,它的层级是最高的。
2. 页面层级
小程序页面跳转打开最多五层,超出五层不会跳转了
3. 组件名
mpvue 组件名大写会提示,统一小写,警告信息如下:
4. 图片路径
微信小程序不支持本地引用背景图片(image 标签支持本地图片)、音频、视频,所以需要外链。对于图片还可以使用 Base64 编码,直接在 html 或 css 中引用
- 相对路径图片不显示
<img src="../../images/logo.png">
解决方案:
- 把路径
import
进来,或把图片放在 static 目录下
- 把路径
background-image
背景图在真机无法显示
- 解决方案
外链
base64 编码
background-image: url('转换后的编码') <!-- 如果多次引用可将其设为全局变量,在js文件引用 -->
使用 image 组件,去掉背景图(可以使用相对路径)
- 解决方案
5. wx.request post 方法失败
wx.request
post 方法参数传输失败wx.request
post 的content-type
默认为application/json
如果服务器没有用到 json 解析,可以更改content-type
为urlencoded
wx.request({
...
method: 'post',
header: {
'content-type': 'application/x-www-form-urlencoded'
},
...
})
6. 冷启动
小程序的机制,是在退出五分钟内进入,就会显示的是退出前的页面,如果你希望进入小程序都相当于冷启动的方式,直接进入主页面。你可以在page的onUnload里面里面set一个值,然后在app的onShow的时候判断这个值,然后决定是否跳到首页~
7. 录音管理相关
7.1 onPause
录音暂停事件
监听情况:
- pause 事件--手动
不能监听:
- 自然播放结束
- stop 事件--手动
7.2. 小程序实现语音流式识别
见博文-目前未更新: mp - Voice stream processing
8. 视频相关
--待续
9. 地图相关
地图上覆盖层——可实现
组件支持:
cover-view
&cover-image
- 其他部分组件在开发工具上支持,真机上不显示
事件支持:
- tap
- touch
- 不支持 touchmove,touchend
- 不会冒泡到 map组件
工具相关
1. 开发工具
1.1. 调试与非调试模式
假如工具内开启不校验域名选项
此时,调试模式下,可以不校验域名问题;http或者不合规范的请求地址将被允许,比如带有端口的地址(正常情况下url是不允许带端口的)
主要用途:
- 使用本地服务
- 使用未配置的域名
- 使用非 https 域名
- 在域名不合规范时,使用必须appid才可以使用的部分调试
1.2. 真机预览问题
调试模式下可用,而非调试模式下不可用的情况:
- 检查下是否没有配置好合法域名
- 假如配置好了域名,排查https问题
request fail
问题排查后台域名没有配置配置完毕请点击刷新按钮
重启开发者工具,检查配置信息是否更新
域名没有备案或或是备案后不足24小时;备案未生效
ssl 协议有问题
同时测试ios和安卓,假如有一方可以,一方不行,则是证书问题,请选用受认可的证书
其他可参考:https 解决方案
2. 第三方 UI 库
字体/第三方UI库引用不支持
@font-face {
font-family: '字体名称';
src: url("../../resources/font/UKIJTuzTom.eot");
font-weight: normal;
font-style: normal;
}
微信小程序 @font-face 里 添加url地址没用, 所以 URL地址替换掉 base64 编吗实现
- 先外部字体准备好
http://transfonter.org/
网站里 上传字体,选择base64 编吗 ,fotmat后下载- 下载包里有个 style文件 打开后 代码可以添加到WXSS里
3. wxcharts
基于canvas 绘制,体积小巧
由于微信小程序本身框架的限制,很难集成目前已有的图表工具,显示图表目前有两种方案:
- 服务器端渲染图表,输出图片,微信小程序中直接显示渲染好的图片
- 需要后台有一套渲染服务,并且有一定的网络开销
- 微信小程序API中提供了canvas的支持,利用canvas自行绘制图表
wxcharts 采用第二种方案
如何使用
直接引用编译好的文件
dist/wxcharts.js
或者dist/wxcharts-min.js
自行编译
git clone https://github.com/xiaolin3303/wx-charts.git
npm install rollup -g
npm install
rollup -c 或者 rollup --config rollup.config.prod.js
mpvue-小程序之蹲坑记的更多相关文章
- 第一个mpvue小程序开发总结
前言 说起小程序,其实在去年我都还只试着照着官方文档写过demo的,不过现在这家公司小程序做得比较多,我来之后也参与了几个小程序的开发了,最开始那几个是用的wepy,最近一个开始转用mpvue开发,最 ...
- mpvue 小程序开发之 数据埋点统计
mpvue 小程序开发之 数据埋点统计 在开发过程中,有数据统计的需求,需要获取小程序当前页面和来源页面的数据,以及页面的停留时间 在对小程序api进行了一番研究之后,发现获取这些数据其实并不难 当前 ...
- 微信小程序错误——mpvue小程序:未找到 app.json 中的定义的 pages "pages/XXX/XXX" 对应的 WXML 文件
背景 在刚开始学习开发小程序时,使用微信开发工具在app.json建立页面,写好配置文件名称后,应该会自动生成页面的4个文件,结果没有生成文件,反而报错:mpvue小程序:未找到 app.json 中 ...
- mpvue小程序开发之 iconfont图标引入
背景: mpvue进行小程序项目开发时候,会有很多图标需求,但是小程序官方提供的icon图标库实在有限而且也不利于调样式,所有想到和之前前端项目一样引入iconfont. 图标加入购物车及项目 下载到 ...
- mpvue小程序开发之 wx.getUserInfo获取用户信息授权
一.背景 在使用美团的mpvue2.0框架搭建起小程序项目后,做获取用户信息时遇到一些问题:微信小程序更新api后,获取用户信息只能通过button上的绑定方法 来获取用户信息,vue上方法绑定不能直 ...
- mpVue小程序全栈开发
1.微信小程序,mpVue和wepy的对比 2. 3.es6中关于数组的一些方法 <script> let arr = [,,,] // 遍历 arr.forEach(v => { ...
- mpvue小程序图片404
mpvue开发小程序时候,要添加静态本地图片 <img src="../../images/bg.png" alt=""> 会报错: VM14878 ...
- mpvue小程序开发入门级指南
报错指南 "Error: ERR_GET_SESSION_KEY {"code":5100,"message":"(-1)服务内部错误,请稍 ...
- mpvue 小程序加载不了图片 Error: Failed to load local image resource /images/xx.png the server responded with a status of 404 (HTTP/1.1 404 Not Found)
mpvue开发小程序时候,要添加静态本地图片 <img src="../../images/bg.png" alt=""> 会报错: VM14878 ...
随机推荐
- 小心!FOMO3D的坑
null 01 前方高能 近日,区块链机构安比(SECBIT)实验室审计后确认,FOMO3D游戏的智能合约存在随机数漏洞可被利用,FOMO3D合约及所有抄袭源码的山寨合约均存在该安全漏洞. 原本设计上 ...
- vue-cli配置jquery 以及jquery第三方插件
只使用jquery: 1. cnpm install jquery --save 2. cnpm install @types/jquery --save-dev (不使用ts的不需要安装此声明 ...
- c++ 中反正单词用到了resize()
resize(n) 调整容器的长度大小,使其能容纳n个元素.如果n小于容器的当前的size,则删除多出来的元素.否则,添加采用值初始化的元素. 题目如下: 151. Reverse Words in ...
- springboot ueditor 使用心得
1.将ueditor引入项目中会发现,图片不能上传,返回值意思是因配置文件错误,导致图片无法上传 默认情况是使用jsp初始配置文件,这就需要项目支持jsp解析 在maven中引入 <!--添加对 ...
- Java集合整体框架
Java中的集合类有List.Set.Map Collection的实现类:List.Set List的实现类:ArrayList.LinkedList.Vector Set的实现类:HashSet. ...
- 【bzoj3196】Tyvj 1730 二逼平衡树 线段树套Treap
题目描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:1.查询k在区间内的排名2.查询区间内排名为k的值3.修改某一位值上的数值4.查询k在区间内的前驱(前驱定义 ...
- hdu3068最长回文(Manacher算法)
简单来说这是个很水的东西.有点dp的思想吧.推荐两个博客,很详细. http://blog.csdn.net/xingyeyongheng/article/details/9310555 http:/ ...
- cdq分治入门学习 cogs 1752 Mokia nwerc 2015-2016 G 二维偏序
/* CDQ分治的对象是时间. 即对于一个时间段[L, R],我们取mid = (L + R) / 2. 分治的每层只考虑mid之前的修改对mid之后的查询的贡献,然后递归到[L,mid],(mid, ...
- 解决IE下页面空白或者报错:[vuex] vuex requires a Promise polyfill in this browser
[vuex] vuex requires a Promise polyfill in this browser 上述错误的原因是不支持 Promise 方法,导致页面出现空白无法加载. 解决方法如下: ...
- nc用法小记
By francis_hao Jun 30,2017 ncat:连接和重定向套接字 概要 ncat [OPTIONS...] [hostname] [port] 描述 ncat 是一个集 ...