美文网首页
uniapp 页面间通讯使用及注意点

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

作者: 小北风sky | 来源:发表于2024-06-30 23:52 被阅读0次

    页面间通讯使用概述

    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 方法中移除监听

    相关文章

      网友评论

          本文标题:uniapp 页面间通讯使用及注意点

          本文链接:https://www.haomeiwen.com/subject/oqqmcjtx.html