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');
		},
相关推荐
GISer_Jing14 分钟前
笑不活了!蒸馏Skill竟能复刻前任、挽留同事?三大热门项目+完整地址汇总
前端·人工智能
Bigger1 小时前
🚀 mini-cc:打造你的专属轻量级 AI 编程智能体
前端·node.js·claude
小江的记录本1 小时前
【网络安全】《网络安全三大加密算法结构化知识体系》
java·前端·后端·python·安全·spring·web安全
早起傻一天~G1 小时前
vue2+element-UI上传图片封装
开发语言·javascript·ui
广师大-Wzx1 小时前
JavaWeb:前端部分
java·前端·javascript·css·vue.js·前端框架·html
M ? A1 小时前
你的 Vue v-memo 与 v-once,VuReact 会编译成什么样的 React 代码?
前端·javascript·vue.js·经验分享·react.js·面试·vureact
是上好佳佳佳呀1 小时前
【前端(七)】CSS3 核心属性笔记:单位、背景、盒子模型与文本换行
前端·笔记·css3
踩着两条虫2 小时前
VTJ:技术架构概述
前端·架构·ai编程
超级无敌攻城狮2 小时前
Agent 到底是怎么跑起来的
前端·后端·架构
吴声子夜歌2 小时前
Vue3——过度和动画效果
前端·vue.js·es6