uni-app小程序uni.navigateBack返回上一个页面并传递参数.返回上个页面并刷新

返回上一个打开的页面并传递一个参数。有种办法就是使用

假如从B页面返回A页面:

var pages = getCurrentPages();
var prevPage = pages[pages.length - 2]; //上一个页面
prevPage.setData({
mdata:1
})

经过测试,在uni.app中使用B页面使用setData设置A页面参数无法实现(应该是被更改为常量属性了)。
打印console.log(prevPage)前一页面对象可得:

uni-app小程序uni.navigateBack返回上一个页面并传递参数.返回上个页面并刷新_第1张图片

方法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); //执行上个页面的方法

                                }
                            }

                        })

你可能感兴趣的:(uni-app,uni-app,小程序,javascript)