7***@qq.com
7***@qq.com
  • 发布:2023-03-03 15:48
  • 更新:2023-03-03 17:55
  • 阅读:331

【报Bug】跳转新页面时uni.$once无法监听到 uni.$emit()

分类:uni-app

产品分类: uniapp/H5

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: Windows 10 家庭中文版 21H2

HBuilderX类型: 正式

HBuilderX版本号: 3.7.3

浏览器平台: Chrome

浏览器版本: 110.0.5481.178(正式版本) (64 位)

项目创建方式: HBuilderX

示例代码:

detail页面

methods: {  
            // 跳转至修改页面  

            navigateToEdit() {  
                // 监听跳转到edit页面$emit所触发的事件  
                uni.$on('ImArrive',()=>{  
                    console.log('ImArrive执行了')  
                    uni.$emit('withArticleInfo',this.currentDetail)  
                })  

                uni.navigateTo({  
                    url: '/pages/edit/edit'  
                })  
            },  
}

edit 页面

onLoad() {  
            console.log(getCurrentPages(),'edit')  
            // 通知detail我生成了,可以发送数据了  
            uni.$emit('ImArrive')  
            uni.$once('withArticleInfo',(value) => {  
                console.log(value,'withArticleInfo')  
                this.test = value  

            })  
        }

操作步骤:

test1111页面

<template>  
    <view>  
        <button @click="test">test1111</button>  
    </view>  
</template>  

<script>  
    export default {  
        data() {  
            return {  

            };  
        },  
        methods: {  
            test() {  
                // 监听跳转到edit页面$emit所触发的事件  
                uni.$once('light',()=>{  
                    console.log('light执行了')  
                    uni.$emit('event','我是test1111传过来的数据')  
                })  

                uni.navigateTo({  
                    url: '/pages/test2222/test2222'  
                })  
            }  

        }  
    }  
</script>  

<style lang="less">  

</style>

test2222页面

<template>  
    <view>  
        我是特色她2222  
    </view>  
</template>  

<script>  
    export default {  
        data() {  
            return {  

            }  
        },  
        onLoad() {  
            console.log(getCurrentPages(),'edit')  
            // 通知detail我生成了,可以发送数据了  
            uni.$emit('light')  
            uni.$once('event',(value) => {  
                console.log(value,'event')  
                this.test = value  

            })  
        }  
    }  
</script>  

<style>  

</style>  

预期结果:

首次跳转test2222时应该打印出: “light执行了“ “我是test1111传过来的数据”

实际结果:

首次跳转test2222时只打印了: ”light执行了“

bug描述:

逻辑描述

在新闻详情页detail中使用navigateTo跳转edit编辑页面前利用uni.$emit(’event‘)传递数据,首次加载时uni.$on('event')无法监听到事件触发,去执行回调函数。返回detail页面,之后再次跳转edit页面是,才会监听到事件,执行回调函数。考虑到触发事件时,页面可能未产生,在edit页面使用$emit('light)用作产生edit页面后提示detail页面可以使用监听器uni.$on('light')触发,( 使用$on('light')包裹$emit('event ') )

2023-03-03 15:48 负责人:无 分享
已邀请:
YUANRJ

YUANRJ

$emit('event')的时候对应的监听事件没有注册上,你需要先注册监听事件,再去触发。

  • 7***@qq.com (作者)

    感谢您,第二次测试的时候将uni.$once('event') 写在uni.$emit('light)前发现能监听到,未及时回复上来,耽误您时间了,抱歉。

    2023-03-04 09:40

要回复问题请先登录注册