跳转传值:
传值页面A
const data = {name:'0'+Math.random() * 100};
// 跳转页面方法
uni.navigateTo({
//url: '/pages/patrol/patrol?data='+encodeURIComponent(JSON.stringify(data)),// 有值
url: '/pages/patrol/patrol?data='+encodeURIComponent(JSON.stringify(null)),// 无值
});
接收值页面B
onLoad(option){// 接收传递过来的值
// 对象接收方法
//console.log("option",JSON.parse(decodeURIComponent(option.data)));
const params = JSON.parse(decodeURIComponent(option.data));
console.log("params",params);
if(params != null && params.name.length > 0){
// 标识不编辑
this.isEditing = false;
this.formData.name = params.name;
}else{
// 标识编辑
this.isEditing = true;
}
},
返回上一页面传值:
方法一:
可能会报错Cannot read property '$vm' of undefined
传值页面B
// 获取页面栈
const pages = getCurrentPages();
const nowPage = pages[pages.length - 1]; //当前页页面实例
const prevPage = pages[pages.length - 2];//上一页页面实例
console.log("prevPage",JSON.stringify(prevPage))
// 给上一页返回数据
prevPage.$vm.value = this.formData;
// 返回上一页
uni.navigateBack({
delta: 1, // 默认值是1,表示返回的页面层数
});
接收值页面A
onShow(){
// 接收 patrol.vue跳转返回传值
const pages = getCurrentPages();
const currPage = pages[pages.length - 1]; // 当前页的实例
this.dataVal = currPage.$vm.value;
console.log("dataVal",this.dataVal);
}
方法二:
uni.relaunch
会关闭所有页面,并打开到应用内的某个页面,因此用户会看到重启的效果,慎用。
传值页面B
uni.reLaunch({
url: '/pages/index/index?data='+encodeURIComponent(JSON.stringify(data))// 有值
});
接收值页面A
onLoad(option){// 接收传递过来的值
// 对象接收方法
//console.log("option",JSON.parse(decodeURIComponent(option.data)));
const params = JSON.parse(decodeURIComponent(option.data));
console.log("params",params);
if(params != null && params.name.length > 0){
// 标识不编辑
this.isEditing = false;
this.formData.name = params.name;
}else{
// 标识编辑
this.isEditing = true;
}
},
方法三(推荐):
传值页面B
// 传递参数
uni.$emit('isPatrol', data);
接收值页面A
async onShow(){
console.log("onShow")
uni.$on('isPatrol',function(data){
console.log('监听到事件来自返回的参数:' + JSON.stringify(data));
// TODO 下面执行刷新的方法
})
}
销毁监听:
onUnload() {// 页面销毁时的生命周期函数
// 移除监听器,避免内存泄露
uni.$off('isPatrol');
},