使用 mpvue
开发小程序,你将在小程序技术体系的基础上获取到这样一些能力:html
Vue.js
开发体验Vuex
数据管理方案:方便构建复杂应用webpack
构建机制:自定义构建策略、开发阶段 hotReloadVue.js
命令行工具 vue-cli 快速初始化项目# 1. 先检查下 Node.js 是否安装成功 $ node -v v8.9.0 $ npm -v 5.6.0 # 2. 因为众所周知的缘由,能够考虑切换源为 taobao 源 $ npm set registry https://registry.npm.taobao.org/ # 3. 全局安装 vue-cli # 通常是要 sudo 权限的 $ npm install --global vue-cli@2.9 $ sudo npm install --global vue-cli@2.9 # 4. 建立一个基于 mpvue-quickstart 模板的新项目 # 新手一路回车选择默认就能够了 $ vue init mpvue/mpvue-quickstart my-project # 5. 安装依赖,走你 $ cd my-project $ npm install $ npm run dev # 可查看package.json支持哪些命令编译
vue init
时:vue
? Project name 你项目的名字
? wxmp appid 你的小程序appid
? Project description 项目描述
? Author 做者信息
? Vue build runtime 仅限运行时:没有自定义呈现函数,只能在*.vue中编译模板
? Use Vuex? 是否使用vuex
? Use ESLint to lint your code? 是否使用eslintnode
运行成功后能够在dist目录下看到build好的文件目录,在相应的小程序开发工具导入便可使用webpack
新增的页面须要从新 npm run dev
来进行编译web
├── README.md #描述文件 ├── build #build时执行文件目录,根据环境执行不一样文件 │ ├── build.js │ ├── check-versions.js │ ├── dev-client.js │ ├── dev-server.js │ ├── utils.js │ ├── vue-loader.conf.js #vue-loader配置文件 │ ├── webpack.base.conf.js │ ├── webpack.dev.conf.js #开发版本打包执行文件 │ └── webpack.prod.conf.js #线上版本打包执行文件 ├── config #项目配置文件 │ ├── dev.env.js #开发环境 │ ├── index.js #core代码 │ └── prod.env.js #线上环境 ├── dist #生成各类小程序到此目录 │ └── wx #生成的微信小程序项目目录,可在微信开发者工具直接导入 │ ├── index.html #挂载index ├── package.json ├── package.swan.json ├── project.config.json #微信项目配置文件 ├── project.swan.json #百度项目配置文件 ├── src #项目核心目录 │ ├── App.vue #项目初始化时先执行组件 │ ├── app.json #页面路径配置文件 │ ├── components #组件目录 │ │ └── card.vue #纯vue组件 │ ├── main.js #项目入口文件 │ ├── pages #页面目录 │ │ └── logs │ │ ├── index.vue #页面模版,纯vue开发 │ │ ├── main.js #页面入口文件 │ │ └── main.json #页面配置文件 │ └── utils #工具文件目录 │ └── index.js #index工具文件 ├── static #静态资源目录 │ ├── images │ │ └── user.png │ └── tabs │ ├── home-active.png │ ├── home.png │ ├── orders-active.png │ └── orders.png └── tree.txt #项目结构树文件
除了 Vue 自己的生命周期外,mpvue 还兼容了小程序生命周期,这部分生命周期钩子的来源于微信小程序的 Page, 除特殊状况外,不建议使用小程序的生命周期钩子。vuex
一、小程序里全部的 BOM/DOM 都不能用,也就是说 v-html
指令不能用。vue-cli
二、 template 中的 {{}}
双花括号的部分,直接编码到 wxml 文件中,因为微信小程序的能力限制(数据绑定),因此没法支持复杂的 JavaScript 表达式。目前可使用的有 + - * % ?: ! == === > < [] .
。shell
// 事件映射表,左侧为 WEB 事件,右侧为 小程序 对应事件 { click: 'tap', touchstart: 'touchstart', touchmove: 'touchmove', touchcancel: 'touchcancel', touchend: 'touchend', tap: 'tap', longtap: 'longtap', input: 'input', change: 'change', submit: 'submit', blur: 'blur', focus: 'focus', reset: 'reset', confirm: 'confirm', columnchange: 'columnchange', linechange: 'linechange', error: 'error', scrolltoupper: 'scrolltoupper', scrolltolower: 'scrolltolower', scroll: 'scroll' }
事件修饰符npm
.stop
的使用会阻止冒泡,可是同时绑定了一个非冒泡事件,会致使该元素上的 catchEventName 失效!.prevent
能够直接干掉,由于小程序里没有什么默认事件,好比submit并不会跳转页面.capture
支持 1.0.9
.self
没有能够判断的标识.once
也不能作,由于小程序没有 removeEventListener, 虽然能够直接在 handleProxy 中处理,但很是的不优雅,违背了原意,暂不考虑mpvue 能够支持小程序的原生组件,好比: picker,map
等,须要注意的是原生组件上的事件绑定,须要以 vue
的事件绑定语法来绑定,如 bindchange="eventName"
事件,须要写成 @change="eventName"
json
示例代码:
<picker mode="date" :value="date" start="2015-09-01" end="2017-09-01" @change="bindDateChange"> <view class="picker"> 当前选择: {{date}} </view> </picker>