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');
		},
相关推荐
原则猫6 小时前
UDP 到底怎么实现可靠的
前端
Java后端的Ai之路6 小时前
14、ReactJS - 路由(Router)
前端·react.js·状态模式
持敬chijing6 小时前
白盒测试与代码审计-js登录逆向实战
javascript·网络·安全·web安全·网络安全·网络攻击模型
优选资源分享6 小时前
PicGo v3.0.3 新版 | 开源免费图床工具
javascript·笔记·electron
裕晟资质规划7 小时前
三类涉密资质延续时限差异分析:军工60日与集成印制3个月的边界
java·服务器·前端·网络·安全
ShineWinsu7 小时前
对于JavaScript:JavaScript基础语法的解析
开发语言·前端·javascript·面试·web·基础语法·循环
月夏7 小时前
Vue3 转 React:18 项对照表 + 5 个必踩的坑(附 7 天上手路线)
前端
广州华水科技7 小时前
单北斗GNSS位移监测系统的应用与维护解析
前端
普通人68 小时前
php+html+canvas实现树状打开的结构
开发语言·javascript·html5·1024程序员节
梦曦i8 小时前
uni-storage 0.1.0 发布:TTL过期管理+多实例隔离
前端·storage·uni-app x