1、mpvue跳转相同路由不同页面,数据不会初始化
例如:当lottery_id=1的时候,apply_list是有数据的,然后我们退出,lottery_id=2进入的时候,apply_list是没有数据的,但是apply_list并不会被初始化为空数组
data(){
return{
apply_list:[],
}
},
onLoad(){
this.lottery_id=this.$root.$mp.query.lottery_id?this.$root.$mp.query.lottery_id:0;
this.getData();
},
methods:{
getData(){
var that = this;
api.detail({lottery_id:that.lottery_id}).then(res => {
if(res.apply_list.length>0){
that.apply_list=res.apply_list;
}
})
}
}
解决办法:
- 第一种:判断 res.apply_list.length==0的时候也让that.apply_list=res.apply_list
- 第二种:在进入子页面时获取数据的生命周期中手动重置数据
onLoad(){
Object.assign(this.$data, this.$options.data())
}
2、不支持在 template 内使用 methods 中的函数
3、不支持过滤器(可以使用es6的filter)
4、自定义tab栏
小程序使用方法:
- 在 app.json 中的 tabBar 项指定 custom 字段,同时其余 tabBar 相关配置也补充完整。
- 所有 tab 页的 json 里需声明 usingComponents 项,也可以在 app.json 全局开启。
- 在代码根目录下添加入口文件:
custom-tab-bar/index.js
custom-tab-bar/index.json
custom-tab-bar/index.wxml
custom-tab-bar/index.wxss
mpvue 自定义tab栏
自定义组件新增 getTabBar 接口,可获取当前页面下的自定义 tabBar 组件实例。
5、button获取用户信息的时候如何传参
// html
<button plain="true" open-type="getUserInfo" @getuserinfo="onGetUserInfo" data-id="aaa" >
//js
onGetUserInfo:function(res){
console.log(res.currentTarget.dataset.id)//传递的参数值
}
6、当前页面无法执行上一页的方法
小程序可以在当前页执行上一页的方法
var pages = getCurrentPages();
if (pages.length > 1) {
var prePage = pages[pages.length - 2];
prePage.getData()
}
在mpvue里面,可以执行跨页面执行onload方法,但是onload里面获取不到页面地址传递的参数
var pages = getCurrentPages();
if (pages.length > 1) {
var prePage = pages[pages.length - 2];
prePage.onLoad()
}
7、单页面如何配置config
在页面文件夹下面新建一个main.json文件。以为用下拉刷新来举例
{
"enablePullDownRefresh":true
}
8、生命周期
首先我们需要了解,微信小程序的生命周期:
App对象,主要有onLaunch, onShow和onHide
。
Page对象,主要有onLoad, onShow, onReady, onHide和onUnload
。
- 由于newPage页面的beforeCreate和created已经提前被触发过了,在调用了wx.NavigateTo跳转到newPage时,先触发小程序的生命周期,再触发beforeMount,这时候开始创建子组件card的实例,按照beforeCreate -> created -> onLoad -> onReady -> beforeMount -> mounted 的顺序触发生命周期钩子。(这里组件的onShow为什么没有触发..需要再深入探究一下)
在created中获取数据? 在mpvue中,created只被触发一次,且在页面创建前被触发,也就是说query中的数据是无法获得的,再次访问页面时如果数据发生了变化,created中的逻辑也并不会再次执行。
推迟到beforeMount? 从功能上说,在beforeMount获取数据是没有问题的。但由于页面unload时没有触发destroy,在再次加载页面时,Vue实例仍然保存着前一次获得的数据,而页面的onLoad、onShow均在beforeMount之前被触发,实践时会发现,页面在数据更新之前就会被显示出来,旧的数据会在页面中“一闪而过”。
在onLoad中获取数据? 实践证明这的确是一种最稳妥的方法,数据能被正确地设置,页面也不会“闪”。 但是官方文档有这样一句话: 除特殊情况外,不建议使用小程序的生命周期钩子。 这里大概是为了代码的移植性做考虑吧,不知道这里算不算特殊情况呢。
使用computed?为了避免使用小程序的生命周期钩子,还可以考虑使用computed的来获取query中的内容,而query需要在页面onLoad之后才存在,这里需要注意做一些判断。
网友评论