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');
		},
相关推荐
answerball44 分钟前
🔥 Vue3响应式源码深度解剖:从Proxy魔法到依赖收集,手把手教你造轮子!🚀
前端·响应式设计·响应式编程
Slow菜鸟2 小时前
ES5 vs ES6:JavaScript 演进之路
前端·javascript·es6
小冯的编程学习之路2 小时前
【前端基础】:HTML
前端·css·前端框架·html·postman
haoqi好奇3 小时前
uniapp+node+mysql接入deepseek实现流式输出
android·mysql·uni-app
Jiaberrr3 小时前
Vue 3 中搭建菜单权限配置界面的详细指南
前端·javascript·vue.js·elementui
科科是我嗷~3 小时前
【uniapp】textarea maxlength字数计算不准确的问题
javascript·uni-app·html
懒大王95273 小时前
uniapp+Vue3 组件之间的传值方法
前端·javascript·uni-app
烛阴4 小时前
秒懂 JSON:JavaScript JSON 方法详解,让你轻松驾驭数据交互!
前端·javascript
拉不动的猪4 小时前
刷刷题31(vue实际项目问题)
前端·javascript·面试
zeijiershuai4 小时前
Ajax-入门、axios请求方式、async、await、Vue生命周期
前端·javascript·ajax