在自定义组件的create和mounted里都试过了,uni.$once('aaa',(res)=>{console.log('111')}),log都没出来,取不到值,怎么传值啊 ? 两年前就有人提了,没回复呀
2***@qq.com
- 发布:2022-08-30 10:12
- 更新:2022-08-30 10:29
- 阅读:523
uni.$once在微信小程序里不执行啊,兄弟组件怎么传值???
分类:uni-app
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