前段時(shí)間剛寫(xiě)完一個(gè)mpvue的小程序,現(xiàn)在得閑必須趕緊記錄和總結(jié)一下熊户,不然很多東西又要忘了
我是比較熟悉vue的語(yǔ)法萍膛,但是也猶豫過(guò)是用原生還是用mpvue,因?yàn)槟菚r(shí)候原生小程序已經(jīng)相當(dāng)成熟而mpvue才剛出來(lái)(踩坑和填坑的前人還很少)
所以我學(xué)習(xí)了幾天原生的框架和語(yǔ)法嚷堡,果斷選擇了mpvue蝗罗,真的是沒(méi)有對(duì)比就沒(méi)有傷害,對(duì)比原生體驗(yàn)不要太好
mpvue是一個(gè)使用 Vue.js 開(kāi)發(fā)小程序的前端框架蝌戒,他是將我們寫(xiě)的vue文件重新編譯成wxml等文件串塑,最后的底層實(shí)現(xiàn)還是用的小程序語(yǔ)法,所以原生小程序語(yǔ)法也是比較重要的北苟,而且像很多下拉刷新桩匪,到底部請(qǐng)求下一頁(yè)什么的等等很多地方也是要用到小程序api的,所以建議大家在入坑之前還是了解一些小程序語(yǔ)法比較好
附上官方文檔http://mpvue.com/#_1
項(xiàng)目配置
使用官方的5分鐘上手粹淋,生成一個(gè)基本框架吸祟,后來(lái)開(kāi)發(fā)也沒(méi)有手動(dòng)修改過(guò)他的配置
用到了4個(gè)插件
mpvue-weui ui庫(kù),相當(dāng)方便輕量好使
官網(wǎng)地址:http://kuangpf.com/mpvue-weui/#/
mpvue-toast 一個(gè)基于mpvue的簡(jiǎn)單彈窗組件
因?yàn)閙pvue目前還不支持全局的組件桃移,所以沒(méi)有辦法像vue組件引入一次就能在所有頁(yè)面使用屋匕,但是mpvue團(tuán)隊(duì)已經(jīng)在考慮新增全局組件功能了
github地址:https://github.com/linrui1994/mpvue-toast
sass 不多介紹
全局安裝:npm install sass-loader node-sass --save-dev
在style節(jié)點(diǎn)加上lang=”scss”,這樣就可以愉快地使用sass進(jìn)行開(kāi)發(fā)了
mpvue-router-patch 在mpvue 中使用 vue-router 兼容的路由寫(xiě)法
當(dāng)知道m(xù)pvue不支持vue-router的時(shí)候我還是非常難受借杰,還好mpvue團(tuán)隊(duì)后面發(fā)布了這個(gè)插件过吻,非常簡(jiǎn)單好用
github地址:https://github.com/F-loat/mpvue-router-patch
<u>接下來(lái)的3個(gè)插件我沒(méi)有用過(guò)但是和mpvue-router-patch一樣是mpvue團(tuán)隊(duì)發(fā)布的,感覺(jué)應(yīng)該也不差,也推薦給大家如果需要可以花時(shí)間了解一下</u>
mpvue-echarts 適用于 Mpvue 的 ECharts 組件
github地址:https://github.com/F-loat/mpvue-echarts
微信小程序富文本解析組件 適用于 Mpvue 的微信小程序富文本解析自定義組件
github地址:https://github.com/F-loat/mpvue-wxParse
mpvue-entry自動(dòng)生成各頁(yè)面的入口文件 集中式頁(yè)面配置纤虽,自動(dòng)生成各頁(yè)面的入口文件乳绕,優(yōu)化目錄結(jié)構(gòu),支持新增頁(yè)面熱更新
github地址:https://github.com/F-loat/mpvue-entry
ajax請(qǐng)求封裝拿走不謝
let urlPath = '' // 項(xiàng)目的域名
export function post(url, data) {
wx.showLoading({
title: '努力加載中',
})
// 由于微信不會(huì)保存后端用于登陸驗(yàn)證的cookie逼纸,這里需要自己從登陸返回的數(shù)據(jù)里取到cookie洋措,然后本地緩存,請(qǐng)求時(shí)在header里帶上cookie
let header = {}
url === 'user/loginworker' // 通過(guò)傳進(jìn)來(lái)的url判斷是否是登陸頁(yè)
? header = {}
: header = {
'content-type': 'application/x-www-form-urlencoded',
'cookie': wx.getStorageSync("sessionid")
}
return new Promise((resolve, reject) => {
wx.request({
url: urlPath + url,
data: data,
method: 'get',
header: header, success(res) {
console.log(res)
if (res.statusCode === 200) {
if (res.data === 9999) { // 與后端的后端返回9999表示cookie失效
wx.showModal({
content: '登陸超時(shí)請(qǐng)重新登陸',
showCancel: false,
success: function (res) {
if (res.confirm) {
wx.navigateTo({
url: '../../pages/login/main',
})
}
}
})
} else if (res.data.code && res.data.code !== 200) { // 若返回coode碼且不等于200表示傳入?yún)?shù)有問(wèn)題
res.message = res.data.message, reject(res)
} else resolve(res)
// 存儲(chǔ)cookie
res.data.message === '登錄成功杰刽。' ? wx.setStorageSync("sessionid", res.header["Set-Cookie"]) : ""
}else {
res.message = '服務(wù)器錯(cuò)誤請(qǐng)求失敗'
reject(res)
}
wx.hideLoading()
}, fail(err) {
err.message = '請(qǐng)求超時(shí)請(qǐng)稍后再試'
reject (err)
wx.hideLoading()
}
})
})
}
生命周期鉤子
created是vue的生命周期在mpvue里所有頁(yè)面的created函數(shù)會(huì)在項(xiàng)目加載的時(shí)候被一起調(diào)用菠发,可用性不大,可以使用onShow()代替贺嫂,但是onShow()只有在隱藏又顯示后才會(huì)顯示,也就是第一次加載不會(huì)執(zhí)行
created() {
console.log('created')
},
mounted() {
console.log('mounted')
},
onLoad() {
console.log('onLoad')
},
onShow() {
console.log('onShow')
},
onUnload() {
console.log('onUnload')
},
onHide() {
console.log('onHide')
},
頁(yè)面跳轉(zhuǎn)后并沒(méi)有銷毀頁(yè)面實(shí)例
比如一個(gè)搜索頁(yè)面滓鸠,頁(yè)面第一次進(jìn)來(lái)所有的數(shù)據(jù)都是空的,但你搜索一次之后第喳,input框就有值了糜俗,這個(gè)時(shí)候再跳轉(zhuǎn)到其他頁(yè)面或者返回之后再進(jìn)入這個(gè)頁(yè)面那個(gè)值依然存在,頁(yè)面跳轉(zhuǎn)后并沒(méi)有銷毀頁(yè)面實(shí)例曲饱,而是將其推入頁(yè)面棧中悠抹,所以會(huì)保存之前的舊的數(shù)據(jù),目前為止看到的比較統(tǒng)一的解決辦法就是:在onShow()或者onLoad()手動(dòng)清空
關(guān)于微信直播
這個(gè)小程序需要引入監(jiān)控相當(dāng)于是直播功能渔工,這個(gè)組件也是有點(diǎn)坑
Live-player組件本身只能播放锌钮,如果想要在組件上加功能,像什么全屏靜音播放暫停之類的功能需要使用wx.createLivePlayerContext()方法引矩,而且由于live-player層級(jí)是最高的,如果你需要在組件上加功能比如點(diǎn)一下全屏再點(diǎn)下退出全屏或者加css樣式侵浸,你必須寫(xiě)在 cover-view cover-image上面旺韭,直接加在live-player上是沒(méi)用的
<live-player id='liveInfo' src="" mode="live" autoplay='false' @bindstatechange="statechange" binderror="error">
<cover-image @click="requestFullScreen"></cover-image>
</live-player>
你以為這樣就完了嘛,不掏觉,如果你有一個(gè)直播列表区端,比如一個(gè)屏幕同時(shí)有一個(gè)以上的live-player組件那么你全屏的時(shí)候就會(huì)發(fā)現(xiàn)其余的組件因?yàn)閷蛹?jí)的原因全部覆蓋在你全屏的那個(gè)組件之上
解決辦法:全屏是v-if隱藏其余的組件,退出時(shí)再顯示
作者:沒(méi)事兒啊
鏈接:http://www.reibang.com/p/e22590a2f4bc
來(lái)源:簡(jiǎn)書(shū)
著作權(quán)歸作者所有澳腹。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán)织盼,非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。