前段时间刚写完一个mpvue的小程序,如今得闲必须赶忙记录和总结一下,否则不少东西又要忘了css
我是比较熟悉vue的语法,可是也犹豫过是用原生仍是用mpvue,由于那时候原生小程序已经至关成熟而mpvue才刚出来(踩坑和填坑的前人还不多)前端
因此我学习了几天原生的框架和语法,果断选择了mpvue,真的是没有对比就没有伤害,对比原生体验不要太好vue
mpvue是一个使用 Vue.js 开发小程序的前端框架,他是将咱们写的vue文件从新编译成wxml等文件,最后的底层实现仍是用的小程序语法,因此原生小程序语法也是比较重要的,并且像不少下拉刷新,到底部请求下一页什么的等等不少地方也是要用到小程序api的,因此建议你们在入坑以前仍是了解一些小程序语法比较好node
附上官方文档mpvue.com/#_1git
使用官方的5分钟上手,生成一个基本框架,后来开发也没有手动修改过他的配置github
用到了4个插件ajax
官网地址:kuangpf.com/mpvue-weui/…vue-router
由于mpvue目前还不支持全局的组件,因此没有办法像vue组件引入一次就能在全部页面使用,可是mpvue团队已经在考虑新增全局组件功能了npm
github地址:github.com/linrui1994/…小程序
全局安装:npm install sass-loader node-sass --save-dev
在style节点加上lang=”scss”,这样就能够愉快地使用sass进行开发了
当知道mpvue不支持vue-router的时候我仍是很是难受,还好mpvue团队后面发布了这个插件,很是简单好用
github地址:github.com/F-loat/mpvu…
接下来的3个插件我没有用过可是和mpvue-router-patch同样是mpvue团队发布的,感受应该也不差,也推荐给你们若是须要能够花时间了解一下
mpvue-echarts 适用于 Mpvue 的 ECharts 组件
github地址:github.com/F-loat/mpvu…
微信小程序富文本解析组件 适用于 Mpvue 的微信小程序富文本解析自定义组件
github地址:github.com/F-loat/mpvu…
mpvue-entry自动生成各页面的入口文件 集中式页面配置,自动生成各页面的入口文件,优化目录结构,支持新增页面热更新
github地址:github.com/F-loat/mpvu…
let urlPath = '' // 项目的域名
export function post(url, data) {
wx.showLoading({
title: '努力加载中',
})
// 因为微信不会保存后端用于登录验证的cookie,这里须要本身从登录返回的数据里取到cookie,而后本地缓存,请求时在header里带上cookie
let header = {}
url === 'user/loginworker' // 经过传进来的url判断是不是登录页
? 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: '登录超时请从新登录',
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表示传入参数有问题
res.message = res.data.message, reject(res)
} else resolve(res)
// 存储cookie
res.data.message === '登陆成功。' ? wx.setStorageSync("sessionid", res.header["Set-Cookie"]) : ""
}else {
res.message = '服务器错误请求失败'
reject(res)
}
wx.hideLoading()
}, fail(err) {
err.message = '请求超时请稍后再试'
reject (err)
wx.hideLoading()
}
})
})
}
复制代码
created是vue的生命周期在mpvue里全部页面的created函数会在项目加载的时候被一块儿调用,可用性不大,可使用onShow()代替,可是onShow()只有在隐藏又显示后才会显示,也就是第一次加载不会执行
created() {
console.log('created')
},
mounted() {
console.log('mounted')
},
onLoad() {
console.log('onLoad')
},
onShow() {
console.log('onShow')
},
onUnload() {
console.log('onUnload')
},
onHide() {
console.log('onHide')
},
复制代码
好比一个搜索页面,页面第一次进来全部的数据都是空的,但你搜索一次以后,input框就有值了,这个时候再跳转到其余页面或者返回以后再进入这个页面那个值依然存在,页面跳转后并无销毁页面实例,而是将其推入页面栈中,因此会保存以前的旧的数据,目前为止看到的比较统一的解决办法就是:在onShow()或者onLoad()手动清空
这个小程序须要引入监控至关因而直播功能,这个组件也是有点坑
Live-player组件自己只能播放,若是想要在组件上加功能,像什么全屏静音播放暂停之类的功能须要使用wx.createLivePlayerContext()方法,并且因为live-player层级是最高的,若是你须要在组件上加功能好比点一下全屏再点下退出全屏或者加css样式,你必须写在 cover-view cover-image上面,直接加在live-player上是没用的
<live-player id='liveInfo' src="" mode="live" autoplay='false' @bindstatechange="statechange" binderror="error">
<cover-image @click="requestFullScreen"></cover-image>
</live-player>
复制代码
你觉得这样就完了嘛,不,若是你有一个直播列表,好比一个屏幕同时有一个以上的live-player组件那么你全屏的时候就会发现其他的组件由于层级的缘由所有覆盖在你全屏的那个组件之上
解决办法:全屏是v-if隐藏其他的组件,退出时再显示
若有不足、须要改善或者还能优化的地方欢迎指出不胜感激,欢迎留言交流 (´▽`ʃ♡ƪ)**