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');
		},
相关推荐
满栀5859 分钟前
状态管理:Redux、Vuex、Pinia 核心区别
前端·javascript·typescript
一拳不是超人1 小时前
DeepSeek Harness 为什么敢说"一切皆插件"?拆透 Cordis 引擎的五大核心机制
前端·人工智能·agent
IT_陈寒1 小时前
Python的GIL让我多写了500行代码
前端·人工智能·后端
风骏时光牛马1 小时前
AI智能体能力调度微服务
前端
大龄码农有梦想2 小时前
Vue + BPMN.js + Camunda:搭建企业级流程设计器完整实践
javascript·vue.js·流程设计器·bpmn.js·bpmn·流程审批·工作流设计器
Eloudy3 小时前
ReAct 原理简介
前端·javascript·人工智能·react.js·agent·gpu
ZJU_统一阿萨姆4 小时前
【DSH】如何将 DeepSeek Harness 嵌入生产环境?万字解构 DeepSeek Agent Harness 的运行机制与安全边界
前端·javascript·安全
用户921080262864 小时前
4. 前端地图大量点位实时更新优化:后端推增量,前端做 diff
前端
SoaringHeart4 小时前
Flutter最佳实践:Web项目中文字体首次加载乱码问题解决
前端·flutter
西安小哥5 小时前
破局与重生:大厂前端如何借力 AI 转型“超级全栈“
前端·人工智能