当前位置:   article > 正文

uniapp EventChannel 页面跳转参数事件传递navigateBack,navigateTo 成功后通知事件区别

uniapp eventchannel

问题:navigateBack()emit事件在onload()监听不到

 从A页面跳转到B页面,在B点击产生数据后,跳转回到A,并告诉A点击的数据是什么,使用:

navigateBack()。

(页面跳转流程: A->B ->A)

B页面:

  1. toPage() {
  2. uni.navigateBack({
  3. complete: (res) => {
  4. console.log(">>>com ", res)
  5. this.getOpenerEventChannel().emit('selecteCust', this.selectCustomer)
  6. },
  7. success: (res) => {
  8. console.log(">>>res", res)
  9. // res.eventChannel.emit('testCust', {data: this.selectCustomer})
  10. // 打开成功的话, 向打开的页面传递数据,传递的事件名:selecteCust
  11. this.getOpenerEventChannel().emit('selecteCust', this.selectCustomer)
  12. }
  13. })
  14. },

A页面:

eventChannel.on无法监听到B传递过的事件: selecteCust

  1. onLoad() {
  2. // 监听事件
  3. this.ec = this.getOpenerEventChannel();
  4. console.log(">|--,,,,,,,,,,,eventchannel", this.ec)
  5. this.ec.on('testCust', (res) => {
  6. console.log("................selecteCust,监听到了", res)
  7. })
  8. },

官方文档

uni.navigateTo()

 

 uni.navigateBack()

 

分析:当前传递参数方式是下级给上级传递消息,使用navigiateBack()话,要在跳转之后再 

解决:

方式1:navigateBack()改成navigateTo()可以

  1. onLoad() {
  2. // 监听事件
  3. this.ec = this.getOpenerEventChannel();
  4. console.log(">|--,,,,,,,,,,,eventchannel", this.ec)
  5. this.ec.on('testCust', (res) => {
  6. console.log("................selecteCust,监听到了", res)
  7. this.customer = res.data
  8. })
  9. },

效果:

方式2: 

 A->B->A, A跳转地方添加监听event

  1. selectA() {
  2. uni.navigateTo({
  3. url: '/pages/custList',
  4. // 页面跳转回来事件监听
  5. events: {
  6. selecteCust: (data) => {
  7. console.log(">>选中的客户是", data)
  8. }
  9. })
  10. },

区分:uni.$on和eventChannel.on使用推荐

 

两者使用起来其实差不多,都可以达到父传子,子传父的作用。但是因为作用域的原因,evenetChannel在不同页面的变量可以重名,eventChannel更适合父传子,uni.$on适合子传父

官方文档:

uni.navigateTo(OBJECT) | uni-app官网

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/656486
推荐阅读
相关标签
  

闽ICP备14008679号