【移动端】uniapp:实现页面间通讯

文章介绍了uni-app中三种页面通信的方式:1)使用路径参数简单传递;2)通过EventChannel实现安全的页面间通信;3)利用uni.$emit、uni.$on等全局事件进行通信。路径参数适合简单数据,EventChannel推荐使用,全局事件则需注意事件名称唯一性和内存管理。
摘要由CSDN通过智能技术生成

1. 使用路径参数实现页面通讯

使用该方式时,如果传输的数据较为复杂,不推荐使用,但如果需要传入的参数简单,推荐使用这种方式,他是内存开销最小的一种方式

源页面

源页面只需要在跳转的页面地址后面加上需要传输的参数即可

uni.navigateTo({
  	url: "/pages/OrderDetailInfo/index?a=1"
 });

目标页

目标页都是通过onLoad生命周期方法的参数,获取上一个页面传输过来的数据

Vue2、Vue 3 选项式

export default {
	onLoad: function (option) { //option为object类型,会序列化上个页面传递的参数
		console.log(option.a); //打印出上个页面传递的参数。
	}
}

Vue 3 组合式

onLoad((option)=> { //option为object类型,会序列化上个页面传递的参数
	console.log(option.a); //打印出上个页面传递的参数
})

2. EventChannel 页面间通讯

推荐使用这种方式:这种方式创建监听只在原页面和目标页面间作用,不在其他页面作用

源页面

uni.navigateTo({
  	url: "/pages/OrderDetailInfo/index",
    success: function (res) {
         res.eventChannel.emit("onOpenDetialInfo", props.info);
    }
 });

目标页

Vue 2、Vue3 选项式

在vue2 和vue3选项式中只需要在onLoad生命周期中通过预先注入到VueComponent实例中的getOpenerEventChannel方法获取监听器

export default {
//.......
onLoad: function(option) {
  const eventChannel = this.getOpenerEventChannel();
  eventChannel.on('onOpenDetialInfo', function(data) {
    console.log(data)
  })
}

}

Vue3 组合式

在vue3 组合式中,需要通过预置的getCurrentPages方法,获取到当前页面实例,再通过Page实例的$vm即可获取到getOpenerEventChannel监听器

onLoad((options) => {
    const pop = getCurrentPages().pop();
    pop.$vm.getOpenerEventChannel().on("onOpenDetialInfo", function (data) {
        orderInfo.value = data;
    });
});

3. 使用uni.$emituni.$onuni.$onceuni.$off实现页面通讯

该方式不仅能实现页面通讯,还能实现跨组件间通讯,因为它是通过全局监听实现的,相当于vue的BUS插件
优点:
1. 可在任意地方使用$emit触发事件,耦合性较低
缺点:
1. 因为他的触发事件都是全局的,所以要求事件名称是不能重复的,相反提高了代码的耦合性
2. 需要在组件销毁时需要使用$off函数关闭监听器,避免持续监听,产生内存开销过大和错误的代码逻辑

源页面

uni.$emit('onOpenDetialInfo',data)

目标页

uni.$on('onOpenDetialInfo',(data)=>{
console.log(data)
})
uni.$once('onOpenDetialInfo',(data)=>{
console.log(data)
})
uni.$off('onOpenDetialInfo',()=>{
//关闭后执行
})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Space Chars

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值