uniapp 页面间通讯使用及注意点

页面间通讯使用概述

https://uniapp.dcloud.net.cn/api/window/communication.html#off

uni.$emit('add',{msg:'页面更新'})

uni.$on('add', this.add)

uni.$off('add', this.add)

...
methods: {
    add(e) {
            this.val += e.data
    }
}

会出现释放监听无效的问题,之所以释放监听无效是因为绑定监听和释放监听并没有使用相同的方法。目前可行的解决方法是把要绑定的方法单独定义出来,这样在绑定和释放监听的时候就能确保都是相同的方法,就能真正释放监听的绑定。

即便按照上述操作,可能还会出现无法释放的问题。

简单暴力些可以直接执行 uni.$off('add') 进行全局释放。

不同页面的使用

非 TabBar 的页面

在非 TabBar 的页面,可以在页面 onLoad 里边 uni.$on 注册监听,onUnload 里边 uni.$off 移除,官方也是这么推荐的

📔 来源于官方文档说明

注意事项

  • uni.$emit、uni.$on 、 uni.$once 、uni.$off 触发的事件都是 App 全局级别的,跨任意组件,页面,nvue,vue 等
  • 使用时,注意及时销毁事件监听,比如,页面 onLoad 里边 uni.$on 注册监听,onUnload 里边 uni.$off 移除,或者一次性的事件,直接使用 uni.$once 监听
  • 注意 uni.$on 定义完成后才能接收到 uni.$emit 传递的数据

Tabbar 页面

在 Tabbar 页面,onLoad 只会执行一次,onUnload 不会执行。会频繁的执行 onShow 和 onHide,所以监听的处理思路如下

  1. onShow 进行 注册监听。注意需要先移除监听,在注册监听。因为重复的注册会导致监听事件被执行多次
  2. 在此页面要跳转的地方 移除监听
  3. 在其他 tabBar 页面的 onTabItemTap 方法中移除监听
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • uni-app 是一个使用 Vue.js 开发所有前端应用的框架,开发者编写一套代码,可发布到 iOS、Andro...
    水岸东方阅读 285评论 0 0
  • uni-app的基本使用 基础部分: 环境搭建 页面外观配置 数据绑定 uni-app的生命周期 组件的使用 un...
    千山鸟语阅读 588评论 0 1
  • uni-app的基本使用 课程介绍: 基础部分: 环境搭建 页面外观配置 数据绑定 uni-app的生命周期 组件...
    __Mr_Xie__阅读 1,479评论 0 1
  • 1.生命周期 1.1应用的生命周期 1.onLaunch ——当uni-app 初始化完成时触发(全局只触发一次)...
    稚沅阅读 6,548评论 0 0
  • 计划一篇文章把所有知识点都写一下,但是写着过程中,发现内容太多,所有拆分了成了几篇: 主要介绍路由、通信以及开发中...
    云飘雾散阅读 5,425评论 0 4