[已删除]
[已删除]
  • 发布:2022-06-16 18:15
  • 更新:2022-08-08 12:46
  • 阅读:708

【报Bug】vue3页面使用navigateTo的 eventChannel第二次不会触发

分类:uni-app

产品分类: uniapp/H5

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: win10专业版 21H1

HBuilderX类型: 正式

HBuilderX版本号: 3.4.15

浏览器平台: Chrome

浏览器版本: 102.0.5005.63

项目创建方式: HBuilderX

示例代码:
<template>  
    <view v-if="detail" class="message-detail">  
        {{detail.info}}  
    </view>  
</template>  

<script setup>  
    import {  
        getCurrentInstance,  
        ref  
    } from 'vue';  

    const {  
        proxy  
    } = getCurrentInstance();  
    const myEventChannel = proxy.getOpenerEventChannel();  
    const detail = ref();  
    console.log(myEventChannel)  
    myEventChannel.on('messageDetail', ({  
        data  
    }) => {  
        console.log(data);  
        detail.value = data;  
    });  
</script>  

<style lang="scss" scoped>  
    .message-detail {  
        padding: 30rpx;  
    }  
</style>

这是路由跳转页面

操作步骤:

定义一个页面,之后使用

uni.navigateTo({  
            url: '',  
            success(res){  
                console.log(res)  
                res.eventChannel.emit('messageDetail', {  
                    data: {  
info: 'uniapp操作,长按复制,请求携带cookie - 走看看uniapp操作,长按复制,请求携带cookie - 走看看uniapp操作,长按复制,请求携带cookie - 走看看uniapp操作,长按复制,请求携带cookie - 走看看',  
id: '1'  
}  
                })  
            }  
        })  

跳转到代码示例中的页面,在页面可以看到只会在第一次进入的时候打印data,之后都不会打印data

预期结果:

都会进入监听函数

实际结果:

只有第一次进入,之后都不会进入

bug描述:

上一个页面进入代码示例的文件之后,在页面可以看到只会在第一次进入的时候打印data,之后都不会打印data

2022-06-16 18:15 负责人:无 分享
已邀请:
DCloud_UNI_Anne

DCloud_UNI_Anne

此问题已记录后续优化,已加分感谢反馈!

t***@qq.com

t***@qq.com

使用 nextTick 可以解决第二次不会触发的问题:

<script setup>   
import { onLoad } from '@dcloudio/uni-app';  
import { getCurrentInstance, nextTick } from 'vue';    

const instance = getCurrentInstance();  
onLoad(async () => {  
  await nextTick();  
  const eventChannel = instance.proxy.getOpenerEventChannel();  
  eventChannel.on('event-name', (...payloads) => {  
    // 处理 payloads  
  });  
});  
</script>

使用 onLoad 生命周期是为了兼容小程序,如果不需要发布小程序,可以不用这个生命周期。

  • [已删除] (作者)

    我是开发h5的时候遇到这个问题的..没有使用onload

    2022-08-08 14:06

  • t***@qq.com

    回复 [已删除]: 用 nextTick 等下一次渲染执行就可以,全平台都兼容

    2022-08-12 15:22

该问题目前已经被锁定, 无法添加新回复