为了账号安全,请及时绑定邮箱和手机立即绑定

vue 组件通过bus通讯疑问

vue 组件通过bus通讯疑问

犯罪嫌疑人X 2019-05-24 16:00:27
1.问题是否非父子非兄弟关系的组件不能通过bus通讯?请各位大佬赐教解疑这个问题的目的是更深入理解bus的过程产生的,请不要说用vuex2.代码思路在路由中注册a组件,b组件在bus.js创建空的Vue实例作为事件总线访问a组件的页面:/aaa。然后点击按钮,通过bus派发事件在b组件中监听bus的自定义事件。但在a组件中派发事件后再访问b组件,b组件的监听函数未执行如没能看懂,拜托复制相关代码在本地跑下3.相关代码(基于vue-cli)组件a组件a问候组件bimportbusfrom'./bus'exportdefault{methods:{sendMsg(){bus.$emit('send','组件b你好吗?')this.$router.push('/bbb')}}}组件b组件b:{{msg}}importbusfrom'./bus'exportdefault{data(){return{msg:'msg初始值'}},mounted(){bus.$on('send',data=>{console.log(data)console.log(this)this.msg=data})}}bus.jsimportVuefrom'vue';exportdefaultnewVue()路由constaaa=()=>import('@/components/zujian/bus/a')constbbb=()=>import('@/components/zujian/bus/b')exportdefaultnewRouter({routes:[{path:'/aaa',component:aaa},{path:'/bbb',component:bbb}]})
查看完整描述

2 回答

?
动漫人物

TA贡献1815条经验 获得超10个赞

其实了解一下底层原理就明白了,实际上就是运用了Vue内部的事件机制,可以参考Vue事件机制。
emit做的事情就是从事件队列中找到对应的事件并执行,找不到则会丢弃,所以需要保证在此之前已经用on注册了事件。
题主这段代码组件B中的on还没执行过就已经调用了组件A的emit了。
                            
查看完整回答
反对 回复 2019-05-24
?
胡子哥哥

TA贡献1825条经验 获得超6个赞

eventbus可以实现非父子关系的组件之间的通信.前提是两个组件都已经调用过mouted钩子.也就是a/b页面都进入(渲染)过.
                            
查看完整回答
反对 回复 2019-05-24
  • 2 回答
  • 0 关注
  • 485 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号