跳转传值:
传值页面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');},