返回上一个打开的页面并传递一个参数。有种办法就是使用
假如从B页面返回A页面:
var pages = getCurrentPages();
var prevPage = pages[pages.length - 2]; //上一个页面
prevPage.setData({
mdata:1
})
经过测试,在uni.app中使用B页面使用setData设置A页面参数无法实现(应该是被更改为常量属性了)。
打印console.log(prevPage)前一页面对象可得:
方法1:我们可以使用A页面原有方法
B页面传递:
var object={
sx1:"参数1",
sx2:"参数2",
}
prevPage.onShow(object);
uni.navigateBack();
A页面接收参数:
onShow(object){
if(!!object){
console.log(object)
}
}
方法2:A页面自定义方法接收参数
B页面传递:
var object={
sx1:"参数1",
sx2:"参数2",
}
prevPage.$vm.otherFun(object);//重点$vm
uni.navigateBack();
A页面接收参数:
otherFun(object){
if(!!object){
console.log(object)
}
}
如果使用uni.navigateBack该怎么传值呢
uni. e m i t ( ) 传值和 u n i . emit()传值和uni. emit()传值和uni.on()接收
B页面返回A页面
B页面:
uni.$emit('update',{msg:'页面更新'})
uni.navigateBack({
delta: 1
});
A页面:
onShow(){
uni.$on('update', function(e){
console.log('监听到事件来自 update ,携带参数 msg 为:'+e)
})
},
- 注意接收的写在onShow里面。写在onload是不会执行的。
返回上个页面让他重新执行onLoad里面的方法:(这种方法不适用于传递参数的页面,因为返回的时候那个option是获取不到的)
uni.navigateBack({
delta: 2,
success: () => {
let page = getCurrentPages().pop(); //跳转页面成功之后
if (page) {
let e = {};
page.onLoad(e); //执行上个页面的方法
}
}
})