uniapp页面传参的几种方式总结

子页面返回父页面传参,使用uni.$emit和uni.$on页面通讯

一,uni.$emit(eventName,OBJECT)

触发全局的自定义事件,附加参数都会传给监听回调。

eventName为事件名,object为触发事件附加参数。

代码如下:

uni.$emit('gotoNext',{msg:'刷新页面'})

二, uni.$on(eventName,Callback)

监听全局自定义事件,事件由uni.$emit()触发,回调函数会接收所有传入的数。

eventName为事件名,Callback为回调函数。

代码如下:

uni.$on('goto',function(data){console.log('监听到事件来自goto,所带参数msg 为:' +data.msg)})

作用:

开发中对触发页面动态更新将非常又效果。

比如说移动项目通过自己编写的组件(tabbar)进行tabar跳转,这个时候要是某应该页面微信支付成功了,需要返回tabbar页面,你会发现,它不会像其他普通的uni页面,(onshow生命周期)会动态刷新,影响用户体验。所以这个方法很有效,只需要在组件中写入uni.emit(update.masq:'页面刷新')然后在页面使用uni.on('update',function(data){ console.log('监听到事件来自 update ,携带参数 msg 为:' + data.msg); })接收,将函数写入即可。实际应用例子如下:

onShow() {
switch (this.Tab){
case 'demo':
uni.$emit('goto',{msg:'页面更新'});
break;
}
 
},

text页面

created() {
uni.$on('goto', (res) => {
this.list()
console.log(res, '更新');
})
},

三,uni.$off([eventName, callback])移除全局自定义事件监听器

针对于页面传参请直接使用Vue的全局变量更方便 ,因为uni-app框架的uni.$emit()和$on() 虽然使用了定时器能接收到参数,但是不知道为什么第一次总是接收不到导致很多为!但是使用Vue的全局变量能搞定一切!

最后一个小举例:

//从A跳转B页面,B页面返回A页面时传参
//B页面
uni.$emit("targetEvent",{shiftOverId:that.shiftOverId,productOrderId:that.productOrderId })
uni.navigateBack();

//A页面
onLoad: function (e) {
	uni.$on("targetEvent",(e)=>{
		 this.preId =  JSON.parse(e.shiftOverId)
		 this.productOrderId = JSON.parse(e.productOrderId)
		 uni.$off('targetEvent')
	})
},

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
uniapp中,可以使用多种方式进行路由传参。其中一种常用的方式是通过参数传递。通过uni.navigateTo或uni.redirectTo方法进行页面跳转时,可以在url路径后面拼接参数,例如:uni.navigateTo({ url: '/pages/B/B?id=123&name=uniapp' })。在目标页面的onLoad方法中,可以通过this.$route.query来获取传递的参数。这种方式适用于简单的参数传递场景。\[1\] 除了参数传递,uniapp还提供了其他方式来实现路由传递数据的功能,包括事件总线和vuex状态管理。事件总线是一种在不同页面之间传递数据的机制,可以通过uni.$emit方法发送事件,在目标页面通过uni.$on方法监听事件并获取数据。而vuex是一种全局状态管理工具,可以在不同页面之间共享数据。通过在vuex中定义和修改数据,可以实现跨页面的数据传递和共享。这两种方式适用于复杂的数据传递场景。\[2\] 总结起来,uniapp中的路由传参可以通过参数传递、事件总线和vuex状态管理等方式实现,具体选择哪种方式取决于实际需求和场景。 #### 引用[.reference_title] - *1* *2* [Uniapp路由传递数据](https://blog.csdn.net/m0_71469120/article/details/130363980)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [uni-app路由跳转以及页面传参的方法](https://blog.csdn.net/m0_46156566/article/details/105517136)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值