uniapp 页面跳转及页面返回传值

跳转传值:

传值页面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');
		},
相关推荐
WHOVENLY7 小时前
【javaScript】- 笔试题合集(长期更新,建议收藏,目前已更新至31题)
开发语言·前端·javascript
指尖跳动的光7 小时前
将多次提交合并成一次提交
前端·javascript
程序员码歌7 小时前
短思考第263天,每天复盘10分钟,胜过盲目努力一整年
android·前端·后端
oden7 小时前
1 小时速通!手把手教你从零搭建 Astro 博客并上线
前端
若梦plus7 小时前
JS之类型化数组
前端·javascript
若梦plus7 小时前
Canvas 深入解析:从基础到实战
前端·javascript
若梦plus7 小时前
Canvas渲染原理与浏览器图形管线
前端·javascript
C_心欲无痕8 小时前
vue3 - 依赖注入(provide/inject)组件跨层级通信的优雅方案
前端·javascript·vue.js
幺零九零零8 小时前
全栈程序员-前端第二节- vite是什么?
前端