vue 组件之间事件触发($emit)与event Bus($on)的用法说明

 更新时间:2020年07月28日 14:42:15   作者:yehaocheng520  
这篇文章主要介绍了vue 组件之间事件触发($emit)与event Bus($on)的用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

组件之间事件触发

之前使用组件,并不是很频繁,是水平的问题,目前工作中,公司大佬带着我手写过一个组件,再此很感谢他的指导。目前简单的组件已经有了自己的逻辑思维,正在从低级码农向中级码农蜕变。废话不多说。上图看看组件情况。

新增按钮组件:

操作按钮组合组件:

此时有个需求就是,无论是哪个按钮,如果改变了列表中的数据,列表需要实时更新数据。

此时就需要用到组件间的事件触发。

父子组件之间事件触发可以使用$emit

$emit的使用方法如下:

在子组件中,写一个click点击事件。比如:

cancelCU() {
 this.dialogVisible = false;
 this.$emit('closeAdd')
}

然后在父组件中子组件上,添加一个 @closeAdd="closeAddClick",closeAddClick函数就是执行了。

新增按钮可以使用这种方式。但是操作按钮组合中的组件,就属于孙子组件了,孙子组件执行click事件,列表数据需要刷新,此时通过孙子组件触发父组件事件,父组件触发爷爷组件,就比较麻烦了,此时可以通过event bus实现跨组件的事件触发了。

具体使用方法如下:

第一步:

新建一个js文件,来创建出我们的eventBus,我们把它命名为bus.js

内容如下:

import Vue from 'vue';

export default new Vue();

第二步:

在孙子组件和爷爷组件中,都需要引入这个bus.js

import Bus from 'common/js/bus.js';

孙子组件执行方法如下:

addCart(event) { 
 //如果传递参数的话,可以如下这样写
 Bus.$emit('getTarget', event.target); 
 //如果不传递参数可以如下;
 Bus.$emit('getTarget');
}

这里我们在click组件中每次点击,都会在bus中触发这个名为'getTarget'的事件,并将点击事件的event.target顺着事件传递出去。

接着,我们要在show组件中的created()钩子中调用bus监听这个事件,并接收参数:

created() { 
 //如果传递参数的话,爷爷组件需要这样接收
 Bus.$on('getTarget', target => { 
  console.log(target); 
 }); 
 //如果不传递参数的话,则可以如下处理
 Bus.$on('getTarget',()=>{
 //此处执行对应的函数操作
 })
} 

这样,在每次click组件的点击事件中,就会把event.target传递到show中,并console出来。

所以eventBus的使用还是非常便捷的,但是如果是中大型项目,通信比较复杂,还是建议大家直接使用vuex。

补充知识:vue 2 使用Bus.js进行兄弟(非父子)组件通信 简单案例

vue2中废弃了$dispatch和$broadcast广播和分发事件的方法。父子组件中可以用props和$emit()。如何实现非父子组件间的通信,可以通过实例一个vue实例Bus作为媒介,要相互通信的兄弟组件之中,都引入Bus,之后通过分别调用Bus事件触发和监听来实现组件之间的通信和参数传递。

首先需要在任意地方添加一个bus.js

在bus.js里面 写入下面信息

import Vue from 'vue'

export default new Vue;

在需要通信的组件都引入Bus.js

如果你的bus.js是自定义一个bus的文件那from后面就改成你的所放的位置

import Bus from './bus.js'

接下来就是要组件通信了

添加一个 触发 #emit的事件按钮

<template>
  <div id="emit">
    <button @click="bus">按钮</button>
  </div>
 </template> 

import Bus from './bus.js' 
export default { 
  data() {
    return {
      message: ''"
    }
   },
  methods: {
    bus () {
     Bus.$emit('msg', '我要传给兄弟组件们,你收到没有')
    }
  }
}

打开要和$emit通信的另外一个组件 添加

在钩子函数中监听msg事件

<template>
  <div id="on">
      <p>{{message}}</p>
  </div>
</template>

import Bus from './bus.js'
export default {
  data() {
   return {
    message: ''
   }
  },
  mounted() {
    let self = this
    Bus.$on('msg', (e) => {
     self.message = e
     console.log(`传来的数据是:${e}`)
    })
   }
  }

最后p会显示来自$emit传来的信息

以上这篇vue 组件之间事件触发($emit)与event Bus($on)的用法说明就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • vue实现新闻展示页的步骤详解

    vue实现新闻展示页的步骤详解

    最近小编遇到这样的需求,要实现一个新闻展示页功能,刚接到这样的需求还真是一头雾水,不知从哪入手,今天小编通过实例代码给大家介绍下vue实现新闻展示页的步骤详解,感兴趣的朋友跟随小编一起看看吧
    2019-04-04
  • vue中使用unity3D如何实现webGL将要呈现的效果

    vue中使用unity3D如何实现webGL将要呈现的效果

    这篇文章主要介绍了vue中使用unity3D如何实现webGL将要呈现的效果,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • vue2.0与vue3.0及vue与react的区别及说明

    vue2.0与vue3.0及vue与react的区别及说明

    这篇文章主要介绍了vue2.0与vue3.0及vue与react的区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-10-10
  • Vue electron前端开启局域网接口实现流程详细介绍

    Vue electron前端开启局域网接口实现流程详细介绍

    用electron写了一个自己用的小软件,无后端,纯本地的数据。最近想着开发一个手机端app,将PC端的数据进行同步。为了这小小的功能单独写个后端又麻烦。干脆前后端不分离哈哈,直接在前端软件中开启接口
    2022-10-10
  • Vue使用Canvas生成随机大小且不重叠圆

    Vue使用Canvas生成随机大小且不重叠圆

    Canvas是HTML5中新增的元素,专门用来绘制图形,下面这篇文章主要给大家介绍了关于Vue使用Canvas生成随机大小且不重叠圆的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2021-11-11
  • vue ajax 拦截原理与实现方法示例

    vue ajax 拦截原理与实现方法示例

    这篇文章主要介绍了vue ajax 拦截原理与实现方法,结合实例形式分析了vue.js基于ajax拦截实现无刷新登录的相关原理与操作技巧,需要的朋友可以参考下
    2019-11-11
  • Ant Design Vue table组件如何自定义分页器

    Ant Design Vue table组件如何自定义分页器

    这篇文章主要介绍了Ant Design Vue table组件如何自定义分页器问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • vue引入element-ui之后,页面是空白的问题及解决

    vue引入element-ui之后,页面是空白的问题及解决

    这篇文章主要介绍了vue引入element-ui之后,页面是空白的问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01
  • Vue3 全局实例上挂载属性方法案例讲解

    Vue3 全局实例上挂载属性方法案例讲解

    这篇文章主要介绍了Vue3 全局实例上挂载属性方法,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-05-05
  • vue element-ui v-for循环el-upload上传图片 动态添加、删除方式

    vue element-ui v-for循环el-upload上传图片 动态添加、删除方式

    这篇文章主要介绍了vue element-ui v-for循环el-upload上传图片 动态添加、删除方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-10-10

最新评论