第一种方式
通过getCurrentPages获取所有页面栈实例列表的方式(直接上代码)
A页面(相当于我上面所说的列表页)
data(){ return{ status:true; //我们要修改的状态或者数据 }}
B页面(也就是我们A跳过去的页面)
goBack(){ let pages = getCurrentPages()//获取所有页面栈的实例列表 let nowPage = pages[ pages.length - 1 ] //当前页面的实例 let prevPage = pages[ pages.length - 2 ] //上一个页面的实例 prevPage.$vm.status = false //更改上一个页面的数据 uni.navigateBack({ delta:1 //返回上一页 })}
uni.navigateBack({
delta: 1,
success: function() {
// 获取页面栈
let pages = getCurrentPages();
if (pages.length >= 2) {
// 获取上一页实例
let prevPage = pages[pages.length - 2];
// 更新数据
prevPage.$vm.getData() //上一个页面的接口
}
}
})
第二种方式
所以我尝试了另一种方法,$emit,$on,$off的方式去完成这个修改上一页面值的操作
B页面(我们A跳过去的页面,但是B要返回A页面同时修改值)
methods(){ goBack(){ uni.$emit('newPages',{ id:this.pages.id //这个页面的id value:'你想要传过去的值' }) uni.navigateBack() }}
A页面(B页面返回过来同时修改值)
!!!注意最好不要以这种方式写,不然会出现卸载不掉(off)不掉的问题,卸载不掉!卸载不掉!
methods:{
}
onLoad(){ uni.$on('newPages',(e)=>{ this.infoList.forEach((item)=>{ if(item.id==e.id){ item.value = e.value } }) })}
onUnload(){ uni.$off('newPages')}
这种方式来写是最好的(我们把修改的方法写到methods里面当中去,执行方法和卸载方法必须指向的是同一个地址)
methods:{ upData(){ this.infoList.forEach((item)=>{ if(item.id == e.id){ item.value = e.value //修改值 } }) }},
onLoad(){ uni.$on('newPage',this.upData)//on内部调用的时候,会把传过来的参数塞给on监听的执行函数},
onUnload(){ uni.$off('newPage',this.upData)//这样就可以卸载掉了}