因爲公司業務需求的須要,在這一週須要開發小程序,加急看了下小程序的文檔,發現用其原生來編寫程序不是很順手,公司前端用的技術棧是vue
, 詢問了谷哥和度娘發現大部分推薦了 wepy
和 mpvue
,對比了兩個框架,仍是選用了 mpvue, 由於 mpvue
繼承自 vue.js
,其技術規範和語法特色與 Vue.js 保持一致。css
快速搭建 mpvue 目錄
// 全局安裝 vue-cli $ npm install --global vue-cli // 建立一個基於 mpvue-quickstart 模板的新項目 $ vue init mpvue/mpvue-quickstart wx-mpvue-demo // 安裝依賴 $ cd wx-mpvue-demo $ npm install // 啓動構建 $ npm run dev
一個簡單的工程目錄就搭建完成了。前端
封裝本身的公用模塊
Totast
因爲小程序原生的消息提示實在是讓人崩潰,因此咱們先本身來封裝下 totast
, 在 util
目錄新建 totast.js
vue
class toast { static msg (title, {icon = 1}) { wx.showToast({ title, icon: ['success', 'none'][icon] }) } static confirm ({title = '提示', content, callback}) { wx.showModal({ title, content, success: function (res) { if (res.confirm) { callback(res.confirm) } else if (res.cancel) { console.log('用戶點擊取消') } } }) } } export default toast
咱們掛載到main.js中, 在組件裏能夠方便調用git
import toast from './utils/toast' Vue.prototype.$totast = toast
publicRequest
小程序的網路請求不是很方便,咱們也對其封裝一下。github
import totast from './toast' const Authorization = 'Bearer xxx' class publicRequest { static get ({url, data = {}, isJson = false, hasToken = true, header}) { let hasNetWork = checkNetWork() if (!hasNetWork) { totast.msg('網路異常', {}) return false } let contentType = isJson ? 'application/json' : 'application/x-www-form-urlencoded' let _authorization = hasToken ? {'Authorization': Authorization} : {} let _header = Object.assign({'content-type': contentType}, _authorization, header) wx.showLoading({title: '加載中...'}) return new Promise((resolve, reject) => { wx.request({ url, header: _header, dataType: 'json', method: 'GET', data, success: (res) => { if (res.statusCode === 200) { resolve(res.data) } }, fail: (error) => { totast.msg(error.errMsg, {}) reject(error) }, complete: res => { if (res.statusCode !== 200) { totastMessage({ statusCode: res.statusCode, message: res.data.msg }) } wx.hideLoading() } }) }) } static post ({url, data = {}, isJson = false, hasToken = true, header}) { let hasNetWork = checkNetWork() if (!hasNetWork) { totast.msg('網路異常', {}) return false } let contentType = isJson ? 'application/json' : 'application/x-www-form-urlencoded' let _authorization = hasToken ? {'Authorization': Authorization} : {} let _header = Object.assign({'content-type': contentType}, _authorization, header) wx.showLoading({title: '加載中...'}) return new Promise((resolve, reject) => { wx.request({ url, header: _header, method: 'POST', data, dataType: 'json', success: (res) => { resolve(res.data) }, fail: (error) => { totast.msg(error.errMsg, {}) reject(error) }, complete: res => { if (res.statusCode !== 200) { totastMessage({ statusCode: res.statusCode, message: res.data.msg }) } wx.hideLoading() } }) }) } } const checkNetWork = function () { return new Promise(resolve => { wx.getNetworkType({ success: res => { let networkType = res.networkType; if (networkType === 'none' || networkType === 'unknown') { resolve(false) } else { resolve(true) } }, fail: () => { resolve(false) } }) }) } const totastMessage = function ({statusCode, message}) { switch (statusCode) { case 502: totast.msg('服務器異常', {}) break default: totast.msg(message, {}) break } } export default publicRequest
咱們呢也對其掛載到 vue
上去。vue-cli
import publicRequest from './utils/publicRequest' Vue.prototype.$http = publicRequest
咱們先公用出掃一掃npm
const handleScan = function () { return new Promise((resolve, reject) => { wx.scanCode({ success: (res) => { console.log(res) resolve(res) }, fail: error => { reject(error) } }) }) } export default handleScan
公用出來後掛載到咱們的 vue
上後能夠在組件裏直接調用 this.$handleScan
,如json
methods: { async scanCodeInfo () { let goods = await this.$handleScan() console.log(goods) this.codeInfo = goods.result } }
iconfont
圖標由於小程序的wxss文件的font-face的url不接受http地址做爲參數,但能夠接受base64,所以需將字體文件下載後,轉換爲base64,而後引用。
因此咱們能夠在阿里巴巴圖標庫下載下來,將iconfont.ttf
轉換。轉換地址:https://transfonter.org/ 小程序
下載文件後解壓獲得stylesheet.css
文件,將此文件引入到項目。最後寫一個公用的樣式:服務器
.icon:after{ font-family: 'iconfont'; font-weight: lighter; font-style: normal; } .icon-saoyisao:after { content: "\e7c7"; } .icon-hebingxingzhuang:after { content: "\e61a"; }
就可使用了。
如今咱們能夠愉快的使用其開發了,若是對 vue
開發比較熟悉的話,徹底遷移過來是沒有問題的。最後附上項目demo和原文地址每一個人都有第一次,哈哈~這就是個人第一次寫文章,不到之處,望指正。