2***@qq.com
2***@qq.com
  • 发布:2022-08-30 10:12
  • 更新:2022-08-30 10:29
  • 阅读:523

uni.$once在微信小程序里不执行啊,兄弟组件怎么传值???

分类:uni-app

在自定义组件的create和mounted里都试过了,uni.$once('aaa',(res)=>{console.log('111')}),log都没出来,取不到值,怎么传值啊 ? 两年前就有人提了,没回复呀

2022-08-30 10:12 负责人:无 分享
已邀请:
CODE_XU

CODE_XU

未能复现此问题,你可以尝试下面的代码,或提供可复现的 demo

onLoad() {  
    uni.$once('handleOnce', () => {  
        console.log('handleOnce');  
    })  
    uni.$emit('handleOnce')  
}
  • 2***@qq.com (作者)

    要两次才能取到值,代码在下面,你可以试试。

    第一个自定义组件里传值

    closeEvent(){

    uni.$emit('enheng','3333');

    this.$emit('showFlag',true);

    }

    第二个组件里收值,自定义组件里没有onLoad和onShow,create、mounted和ready里要第二次才能取到值...


    onReady() {

    uni.$on('enheng',(res)=>{

    console.log('two!' + res)

    })

    },

    onShow() {

    uni.$on('enheng',(res)=>{

    console.log('two/' + res)

    })

    },

    mounted() {

    uni.$on('enheng',(res)=>{

    console.log('two*' + res)

    })

    },

    onLoad() {

    uni.$on('enheng',(res)=>{

    console.log('' + res)

    })

    },

    created() {

    uni.$on('enheng',(res)=>{

    console.log('two+' + res)

    })

    }

    2022-08-30 11:25

  • CODE_XU

    回复 2***@qq.com: 第一次你的组件可能还未加载完成,未绑定事件就触发了 emit,确保好执行顺讯

    2022-08-30 11:34

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

    回复 CODE_XU: 你说的对,但是怎么确保顺序呢?现在的情况就是如果未触发emit,那么on事件就不执行,不会返回undifined或者null,也没有失败的回调。

    通过延迟emit确实可以取到值,但是这个延迟多久呢?感觉是在碰运气,如果刚好那会手机卡了一下,就又取不到了,不可控呀。

    setTimeout(function() {

    uni.$emit('enheng', '3333');

    }, 100); 目前这样是能取到的,感觉没准呀。。。

    2022-08-30 12:47

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

    回复 CODE_XU: 我知道了,先把值传给页面,页面再给另一个子组件,这样可以保证顺序,只是绕了好大一圈,好像也用不到uni.$on,全是父子间的传值,没用到全局传值。

    2022-08-30 13:08

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