使用手册
mpvue 继承自 Vue.js,其技术规范和语法特点与 Vue.js 保持一致。
本文档适用于有一定 Vue.js 使用经验的开发者。我们默认你已经掌握 Vue.js 技术体系,如果你是新手,你可能需要先熟悉 Vue.js 官方文档。
#五分钟教程
通过 Vue.js 命令行工具 vue-cli,你只需在终端窗口输入几条简单命令,即可快速创建和启动一个带热重载、保存时静态检查、内置代码构建功能的小程序项目:
# 全局安装 vue-cli$npminstall--global vue-cli# 创建一个基于 mpvue-quickstart 模板的新项目$ vue init mpvue/mpvue-quickstart my-project# 安装依赖$cdmy-project$npminstall# 启动构建$npmrun dev
接下来,你只需要启动微信开发者工具,引入项目即可预览到你的第一个 mpvue 小程序。
#框架原理
mpvue 保留了 vue.runtime 核心方法,无缝继承了 Vue.js 的基础能力
mpvue-template-compiler 提供了将 vue 的模板语法转换到小程序的 wxml 语法的能力
修改了 vue 的建构配置,使之构建出符合小程序项目结构的代码格式: json/wxml/wxss/js 文件
#Vue 实例
支持 官方文档:Vue 实例,同时我们做了一些修改,来适应小程序的独特加载逻辑。
#实例生命周期
同 vue,不同的是我们会在小程序 onReady 后,再去触发 vue mounted 生命周期,详细的 vue 生命周期文档请看生命周期钩子
beforeCreate
created
beforeMount
mounted
beforeUpdate
updated
activated
deactivated
beforeDestroy
destroyed
除了 Vue 本身的生命周期外,mpvue 还兼容了小程序生命周期,这部分生命周期钩子的来源于微信小程序的 Page, 除特殊情况外,不建议使用小程序的生命周期钩子。
app 部分:
onLaunch,初始化
onShow,当小程序启动,或从后台进入前台显示
onHide,当小程序从前台进入后台
page 部分:
onLoad,监听页面加载
onShow,监听页面显示
onReady,监听页面初次渲染完成
onHide,监听页面隐藏
onUnload,监听页面卸载
onPullDownRefresh,监听用户下拉动作
onReachBottom,页面上拉触底事件的处理函数
onShareAppMessage,用户点击右上角分享
onPageScroll,页面滚动
onTabItemTap, 当前是 tab 页时,点击 tab 时触发 (mpvue 0.0.16 支持)
用法示例:
newVue({data:{a:1},created(){// `this` 指向 vm 实例console.log('a is: '+this.a)},onShow(){// `this` 指向 vm 实例console.log('a is: '+this.a,'小程序触发的 onshow')}})// => "a is: 1"
注意点:
不要在选项属性或回调上使用箭头函数,比如 created: () => console.log(this.a) 或 vm.$watch('a', newValue => this.myMethod())。因为箭头函数是和父级上下文绑定在一起的,this 不会是如你做预期的 Vue 实例,且 this.a 或 this.myMethod 也会是未定义的。
微信小程序的页面的 query 参数是通过 onLoad 获取的,mpvue 对此进行了优化,直接通过 this.$root.$mp.query 获取相应的参数数据,其调用需要在 onLoad 生命周期触发之后使用,比如 onShow 等,具体生命周期调用顺序,见下图。
#生命周期图示
你不需要立马弄明白所有的东西,不过随着你的不断学习和使用,它的参考价值会越来越高。
生命周期的调用关系和顺序图。
#模板语法
几乎全支持 官方文档:模板语法,下面讲下不支持的情况。
#不支持 纯-HTML
小程序里所有的 BOM/DOM 都不能用,也就是说 v-html 指令不能用。
#不支持部分复杂的 JavaScript 渲染表达式
我们会把 template 中的 {{}} 双花括号的部分,直接编码到 wxml 文件中,由于微信小程序的能力限制(数据绑定),所以无法支持复杂的 JavaScript 表达式。
目前可以使用的有 + - * % ?: ! == === > < [] .,剩下的还待完善。
{{ message.split('').reverse().join('') }}
#不支持过滤器
渲染部分会转成 wxml ,wxml 不支持过滤器,所以这部分功能不支持。
#计算属性
支持 官方文档:计算属性。
#不支持函数
不支持在 template 内使用 methods 中的函数。
#Class 与 Style 绑定
为节约性能,我们将 Class 与 Style 的表达式通过 compiler 硬编码到 wxml 中,支持语法和转换效果如下:
class 支持的语法:
111
222
333
444
555
将分别被转换成:
style 支持的语法:
666
777
将分别被转换成:
不支持 官方文档:Class 与 Style 绑定 中的 classObject 和 styleObject 语法。
最佳实践见上文支持的语法,从性能考虑,建议不要过度依赖此。
此外还可以用 computed 方法生成 class 或者 style 字符串,插入到页面中,举例说明: