董路飞
董路飞
  • 发布:2023-07-02 15:44
  • 更新:2023-12-22 16:48
  • 阅读:3172

uni.$emit() 和uni.$on() 怎么没反应,失效了还是我写的不对?

分类:uni-app

我在 A 页面代码:

<script setup>  
    const toB= (url) => {  
        if (url) {  
                        uni.$emit('dataChanged',{msg:'页面更新'})  
            uni.navigateTo({  
                 url: `../h5/h5`,  
                complete: (e) => {  
                    console.log("跳转 B 页: ", e)  
                }  
            })  
        } else {  
                    //      ...  
        }  
    }  
</script>

B 页面代码:

<script setup>  
    import { onLoad } from "@dcloudio/uni-app"  

    // 页面生命周期  
    onLoad((e) => {  
               // console.log("【这里正常输出】:")  
        uni.$on("dataChanged", function (data) {  
            console.log("【这里不触发】:" + data)  
        })  

    })  

</script>
2023-07-02 15:44 负责人:无 分享
已邀请:

最佳回复

DCloud_UNI_OttoJi

DCloud_UNI_OttoJi - 日常回复 uni-app/x 问题,如果艾特我没看到,请主动私信

这里我补充了 demo 演示了 pages/index -> pages/about 页面跳转过程中发送信息的处理方案。https://gitcode.net/xiurensha5731/uni-app-questions/-/blob/q/api-emit/src/pages/index/index.vue 如有问题请开新帖艾特我沟通

banro

banro

uni.$emit('dataChanged',{msg:'页面更新'}) 放在 complete 里试试

  • 董路飞 (作者)

    后面试过,又出现别的问题。

    uni.$emit 放在 navigateTo 的 complete 里。第一次A跳B,在B页面也不触发,但是此时B页面返回A页面,再跳B页面就触发1次,再返回A页面跳B页面就触发2次,次数以此类推(我已经在生命周期函数onUnload 或 onHide里用 uni.$off移除监听了还是一样 )

    2023-07-02 16:28

2***@qq.com

2***@qq.com

根据官方文档 https://uniapp.dcloud.net.cn/api/window/communication.html
底部最后一行说明:

注意 uni.$on 定义完成后才能接收到 uni.$emit 传递的数据

故,要先定义$on才能再调用$emit!

对于要从A跳转到B页面,且需要从A传参到B页面的需求,文章 https://blog.csdn.net/a666666000/article/details/126749486 给出了2个解决方案。

解决办法(1):嵌套写法
解决办法(2):用定时器延迟$emit的使用
附解决办法(3):使用 uni.getStorageSync

昭昭L

昭昭L - 开心就好

用页面跳转的events,uni.emit你这种场景不适用

要回复问题请先登录注册