使用 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>