小程序路由跳转---事件通信通道EventChannel(一)

EventChannel是什么?

借助wx.navigateTo方法,在两个页面之间构建起数据通道,互相可以通过“派发事件”及“注册事件监听器”来实现基于事件的页面通信。基础库版本v2.7.3以上支持。

EventChannel中主要的方法

EventChannel.emit( strign eventName,any args ) 触发一个事件
EventChannel.on( strign eventName,EventCallback fn ) 持续监听一个事件
EventChannel.once( strign eventName,EventCallback fn ) 监听一个事件一次,触发后失效
EventChannel.off( strign eventName,EventCallback fn) 取消监听一个事件。给出第二个参数时,只取消给出的监听函数,否则取消所有监听函数。

EventChannel的使用

两个页面间构建数据通道

A页面向B页面传输数据
<!--pages/event-channel/index.wxml-->
<button bind:tap="to01Page">跳转至01页面</button>
to01Page() {
    wx.navigateTo({
      url: `/pages/event-channel-01/index`,
      // events: 注册将在目标页面触发(派发)的同名事件的监听器
      events:{
        updateInvoice:(result)=>{
          console.log('返回传输的数据', result);
        }
      },
      // success:跳转后进行可通过res.eventChannel 触发自定义事件
      success:(res)=>{
        res.eventChannel.emit('sendQueryParams',{name: '梅若涵', age: 18, hobby: 'programming'})
      }
    });
  },

B页面监听接收A页面数据并在返回时向A页面传输数据
<!--pages/event-channel-01/index.wxml-->
<button bind:tap="back">返回</button>
 onLoad(options) {
    // 监听acceptDataFromOpenerPage事件,获取上一页面通过eventChannel传送到当前页面的数据
    let eventChannel = this.getOpenerEventChannel();
    eventChannel.once('sendQueryParams',(params)=>{
      console.log('上一页面传来的数据', params);
    })
  },


  back(){
    this.getOpenerEventChannel().emit('updateInvoice', {sex: 'female'});
    wx.navigateBack();
  },

运行结果
需要注意,使用小程序中左上角的返回是无法接收到返回的数据的。

  • 12
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果您想在路由跳转时更新El-Menu的选中状态,可以在路由导航后,手动设置El-Menu的当前选中项。 具体实现方法如下: 1. 在路由导航守卫中监听路由变化,获取当前路由路径。 ```javascript router.beforeEach((to, from, next) => { const currentPath = to.path; // 获取当前路由路径 // ... next(); }) ``` 2. 在El-Menu中设置`default-active`属性为当前路由路径。 ```html <template> <el-menu :default-active="currentPath" class="el-menu-demo" mode="horizontal" @select="handleSelect" > <el-menu-item index="/home">首页</el-menu-item> <el-menu-item index="/about">关于我们</el-menu-item> <el-menu-item index="/contact">联系我们</el-menu-item> </el-menu> </template> ``` 3. 在`handleSelect`方法中,将当前选中项保存到Vuex或本地存储中,以便下次渲染时恢复选中状态。 ```javascript methods: { handleSelect(index, indexPath) { this.$store.commit('setCurrentMenu', index); // 将当前选中项保存到Vuex localStorage.setItem('currentMenu', index); // 将当前选中项保存到本地存储 } } ``` 4. 在组件创建时,从Vuex或本地存储中获取当前选中项,并设置给El-Menu。 ```javascript created() { const currentMenu = this.$store.state.currentMenu || localStorage.getItem('currentMenu'); // 从Vuex或本地存储中获取当前选中项 if (currentMenu) { this.currentPath = currentMenu; // 将当前选中项设置给El-Menu } } ``` 通过以上步骤,就可以实现路由跳转时更新El-Menu的选中状态了。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值