资讯专栏INFORMATION COLUMN

vue -- 非父子组件传值,事件总线(eventbus)的使用方式

zone / 1698人阅读

摘要:我的个人博客地址资源地址非父子组件传值,事件总线的使用方式我的博客地址如果您对我的博客内容有疑惑或质疑的地方,请在下方评论区留言,或邮件给我,共同学习进步。

欢迎访问我的个人博客:http://www.xiaolongwu.cn

前言

先说一下什么是事件总线,其实就是订阅发布者模式;

比如有一个bus对象,这个对象上有两个方法,一个是on(监听,也就是订阅),一个是emit(触发,也就是发布),我们通过on方法去监听某个事件,再用emit去触发这个事件,同时调用on中的回调函数,这样就完成了一次事件触发;

这是一种设计模式,和语言没有关系;

如果不太了解什么是订阅发布者模式,请移步看这篇文章JavaScript设计模式--观察者模式(发布者-订阅者模式)

在实际开发中,往往最麻烦的就是各种组件之间的传值问题;如果利用事件总线就会让这件事情变得很简单;

vue自带事件总线的短板

我们都知道在vue被实例化之后,他就具备了充当事件总线对象的能力,在他上面挂了两个方法,是$emit和$on;

而vue文档说的很明白,$emit会触发当前实例上的事件,附加参数都会传给监听器回调;

由于在实际工作中,我们都是以组件的形式开发,每个组件就是一个实例;

所以利用vue自带的总线能力有很大的局限性,最多只能从子组件触发到父组件中,而不能在非父子组件之间传值;

所以这时,我们就需要有一个全局的事件总线对象,让我们挂载监听事件和触发事件;

举个例子,子组件向父组件传值;父组件向子组件传值很简单,我们这里不说
// 子组件中

// 父组件

实现全局事件总线对象的几种方式 方式一,也是我自己使用的方式(推荐使用,简单)

大概思路是 :在main.js,也就是入口文件中,我们在vue的原型上添加一个bus对象;

具体实现方式如下:

下面的组件A和组件B可以是项目中任意两个组件
//在mian.js中
Vue.prototype.bus = new Vue()  //这样我们就实现了全局的事件总线对象

//组件A中,监听事件
this.bus.$on("updata", function(data) {
    console.log(data)  //data就是触发updata事件带过来的数据
})

//组件B中,触发事件
this.bus.$emit("updata", data)  //data就是触发updata事件要带走的数据
方式二,稍微有点麻烦,但也很容易理解

大概的实现思路: 新建一个bus.js文件, 在这个文件里实例化一下vue;然后在组件A和组件B中分别引入这个bus.js文件,将事件监听和事件触发都挂到bus.js这个实例上,这样就可以实现全局的监听与触发了

写个例子
bus.js文件
// bus.js文件
import Vue from "vue"
export default new Vue()
组件A
// 组件A ,监听事件send

组件B
// 组件B, 触发事件send


这样我们就完成了一个简单非父子组件之间的传值。

我的个人博客地址:http://www.xiaolongwu.cn

github资源地址:vue -- 非父子组件传值,事件总线(eventbus)的使用方式

我的CSDN博客地址:https://blog.csdn.net/wxl1555

如果您对我的博客内容有疑惑或质疑的地方,请在下方评论区留言,或邮件给我,共同学习进步。

邮箱:wuxiaolong802@163.com

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/100878.html

相关文章

  • vue中8种组件通信方式, 值得收藏!

    摘要:一父组件通过的方式向子组件传递数据,而通过子组件可以向父组件通信。而且只读,不可被修改,所有修改都会失效并警告。 之前写了一篇关于vue面试总结的文章, 有不少网友提出组件之间通信方式还有很多, 这篇文章便是专门总结组件之间通信的 vue是数据驱动视图更新的框架, 所以对于vue来说组件间的数据通信非常重要,那么组件之间如何进行数据通信的呢?首先我们需要知道在vue中组件之间存在什么样...

    BicycleWarrior 评论0 收藏0
  • vue2.0开发聊天程序(三)组件通信

    摘要:我在中写了这段代码在组件被创建时候将会执行此函数相当于进入页面的自执行使用方法监听属性并执行一个回调函数按道理在元素被创建的时候,会将监听到的值赋给并且打印。 天地不仁以万物为刍狗,宇宙无义视众生如蝼蚁                  ——萧鼎和我 上一节列出了5个关键点,第一个路由已经解决了,接下来解决第二个问题: 组件的通信问题 一、组件的关系 组件之间的关系无非就是两种父子关系...

    ddongjian0000 评论0 收藏0
  • vue数据传递--我有特殊实现技巧

    摘要:同时有一种特殊的实现方案。组件之间传值有这么几种数据传递方式,和特殊的。在所有实例中使用其进行数据的通信。双多方使用同名事件进行沟通。数据非长效数据,无法保存,只在后生效。这样约定的好处是,我们能够记录所有中发生的改变。 前言 最近碰到了比较多的关于vue的eventBus的问题,之前定技术选型的时候也被问到了,vuex和eventBus的使用范围。所以简单的写一下。同时有一种特殊的实...

    xiaoxiaozi 评论0 收藏0
  • Vue 组件传值(通讯)

    摘要:组件之间的通讯分为三种父给子传子给父传兄弟组件之间的通讯父组件给子组件传值子组件嵌套在父组件内部,父组件给子组件传递一个标识,在子组件内部用接收,子组件在模板里可以通过的形式进行使用。 组件之间的通讯分为三种 父给子传 子给父传 兄弟组件之间的通讯 1 父组件给子组件传值 子组件嵌套在父组件内部,父组件给子组件传递一个标识,在子组件内部用props接收,子组件在模板里可以通过{{}}的...

    CloudDeveloper 评论0 收藏0
  • Vue 组件传值(通讯)

    摘要:组件之间的通讯分为三种父给子传子给父传兄弟组件之间的通讯父组件给子组件传值子组件嵌套在父组件内部,父组件给子组件传递一个标识,在子组件内部用接收,子组件在模板里可以通过的形式进行使用。 组件之间的通讯分为三种 父给子传 子给父传 兄弟组件之间的通讯 1 父组件给子组件传值 子组件嵌套在父组件内部,父组件给子组件传递一个标识,在子组件内部用props接收,子组件在模板里可以通过{{}}的...

    netmou 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<