当前位置: 首页 > Web前端 > vue.js

「后端小伙伴来学前端了」Vue中利用全局事件总线实现组件之间通信

时间:2023-03-31 16:17:34 vue.js

“后端朋友来学前端。”在Vue中,使用全局事件总线实现组件间的通信我想她了。前言上一篇文章写了在vue中使用Props实现组件间的通信,这是组件间最简单最基本的通信方式。父组件通过props向下传递数据给子组件,当子组件有事情要告诉父组件时,它会通过$emit事件告诉父组件。对于父子组件,这种传递方式比较方便实用,但是对于孙子或者兄弟组件就不太友好了。在Vue自身的生态中,也有一个独立的Vuex库来处理组件间的通信,但很多时候,我们并不需要使用Vuex这样的大杀器,而是可以考虑Vue中更简单的事件总线,即EventBus。这里有一个简单的想法:一旦在项目中看到某段代码,或者是多次点击才能获取的变量,或者获取方式相同,就要考虑是否可以让代码实现重用,我们要学会偷懒。只有偷懒,才能更快地前进。开始今天的正文吧...1.什么是globaleventbus1.1?组件之间的交互意味着我们可以在组件之间共享数据。无论是props、EventBus、Vuex、发布订阅等实现组件交互,本质都是实现数据共享。要解决这个问题,使用全局事件总线要容易得多。不过今天的文章主要是先带大家去使用,周末再拉原理。EventBus也称为事件总线。在Vue中,可以使用EventBus作为通信桥梁的概念,就像所有的组件共享同一个事件中心,可以向这个中心注册发送事件或者接收事件,这样组件就可以并行上下通知其他组件,但是它太方便了,所以如果使用不慎,就会造成难以维护的灾难。因此,需要一个更完善的Vuex作为状态管理中心,将通知的概念提升到共享状态层面。1.2.安装全局事件总线//成为事件总线的条件://1.所有的组件对象都必须能够看到这个总线对象,所以我们把这个对象放在Vue原型中//2.这个事件总线对象必须能够调用$on和$emit方法(总线对象必须是Vue的实例化对象或者组件对象)来确定全局事件总线:将vm对象作为事件总线挂载到prototypeobjectofvueimportVuefrom'vue'importAppfrom'./App.vue'Vue.config.productionTip=false//全局总线的使用说明//使用全局总线时,比较好的应用是介于兄弟组件,祖孙组件,这些组件之间不能直接通信,使用全局事件总线Eventbus方便很多Vue.prototype.$bus=this}}).$mount('#app')1.3.基本用例:在App组件中引入一个demo组件,demo组件中有一个按钮,点击可以修改app组件传递给子组件的值并更新视图。App组件演示组件二、全局事件总线和Props实现组件通信的区别个人使用总结哈:props是用来实现组件之间的通信,更方便父子组件之间的通信。如果是祖父母或兄弟组件,就会多一个中间层,也没什么用,感觉比较累赘。对于全局事件总线,挂在vm原型上,非常方便祖孙组件,或者兄弟组件之间的通信,不需要中间层。后记大家加油!!!文中如有不足之处,请及时指出,在此表示衷心的感谢。纸上谈兵的成果总是肤浅的,我知道这件事必须要做。大家好,我是博主宁在淳:一个热爱文艺却走上编程道路的首页青年。希望:当我们相遇时,我们将有所成就。

猜你喜欢