组件之间事件触发

新增按钮组件:

操作按钮组合组件:

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

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

父子组件之间事件触发可以使用$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)的用法说明的更多相关文章

  1. vue组件之间的传值——中央事件总线与跨组件之间的通信($attrs、$listeners)

    vue组件之间的通信有很多种方式,最常用到的就是父子组件之间的传值,但是当项目工程比较大的时候,就会出现兄弟组件之间的传值,跨级组件之间的传值.不可否认,这些都可以类似父子组件一级一级的转换传递,但是 ...

  2. 前端面试 vue 部分 (5)——VUE组件之间通信的方式有哪些

    VUE组件之间通信的方式有哪些(SSS) 常见使用场景可以分为三类: 父子通信: null 父向子传递数据是通过 props ,子向父是通过 $emit / $on $emit / $bus Vuex ...

  3. vue组件之间传值方式解析

    vue组件之间传值方式解析一.父组件传到子组件 1.父组件parent代码如下: <template> <div class="parent"> <h ...

  4. vue 组件之间互相传值:兄弟组件通信

    vue 组件之间互相传值:兄弟组件通信我们在项目中经常会遇到兄弟组件通信的情况.在大型项目中我们可以通过引入 vuex 轻松管理各组件之间通信问题,但在一些小型的项目中,我们就没有必要去引入 vuex ...

  5. Vue 组件之间通信 All in One

    Vue 组件之间通信 All in One 组件间通信 1. 父子组件之间通信 https://stackblitz.com/edit/vue-parent-child-commutation?fil ...

  6. vuex-- Vue.的中心化状态管理方案(vue 组件之间的通信简化机制)

    vuex-- Vue.的中心化状态管理方案(vue 组件之间的通信简化机制) 如果你在使用 vue.js , 那么我想你可能会对 vue 组件之间的通信感到崩溃 .vuex就是为了解决组件通信问题的. ...

  7. vue组件添加事件@click.native

    1,给vue组件绑定事件时候,必须加上native ,否则会认为监听的是来自Item组件自定义的事件 2,等同于在子组件中:  子组件内部处理click事件然后向外发送click事件:$emit(&q ...

  8. react第十七单元(redux和组件之间的通信,react-redux的相关api的用法)

    第十七单元(redux和组件之间的通信,react-redux的相关api的用法) #课程目标 什么是redux-redux react-redux的作用是什么 react-redux如何应用 #知识 ...

  9. vue组件之间的通信以及如何在父组件中调用子组件的方法和属性

    在Vue中组件实例之间的作用域是孤立的,以为不能直接在子组件上引用父组件的数据,同时父组件也不能直接使用子组件的数据 一.父组件利用props往子组件传输数据 父组件: <div> < ...

  10. vue组件之间的传值

    vue中组件之间的传值有好几种情况 1.父向子传值 父组件向子组件传值使用props,直接上实例 city.vue是父组件,list.vue是子组件city.vue里定义cities和hotCitie ...

随机推荐

  1. Qt多线程编程之QThread

    背景引言[ GUI主线程 +子线程] 跟C++11中很像的是,Qt中使用QThread来管理线程,一个QThread对象管理一个线程,在使用上有很多跟C++11中相似的地方,但更多的是Qt中独有的内容 ...

  2. wsl无法创建文件与修改文件

    wsl无法创建文件与修改文件 sudo chown -R username /home/your_folder/ 请将用户名换成你的用户名 且目录换成你想要操作的目录

  3. download links

    1 anaconda https://mirrors.bfsu.edu.cn/anaconda/archive/

  4. vvvvvv异步组件儿

    const AsyncCommonItem = Vue.defineAsyncComponent(()=>{ return new Promise((resolve,reject)=>{ ...

  5. npm run serve 报错问题 (npm ERR! code ELIFECYCLE)

    运行 npm cache clean --force删除 node_modules删除 package-lock.json运行 npm install最后 npm run serve

  6. KVM虚拟机迁移至VMWare ESXi

    需求 由于服务器迁移,为维护方便,将统一使用vmware 平台管理虚拟机,因此需将kvm 虚拟机统一迁至vmware kvm 磁盘镜像转换 查看虚拟机 # virsh list --all Id Na ...

  7. 面试视频知识点整理1-12(渲染机制,js运行机制,页面性能,错误监控)

    技巧(赞美面试官研究的比较深) 1.渲染机制 什么是DOCTYPE及作用? DTD(文档类型定义)是一系列的语法规则,用于定义文件类型.浏览器会根据它来判断文档类型,决定使用何种协议来解析以及切换浏览 ...

  8. Java向MySQL写入中文乱码问题解决

    Java向MySQL写入中文乱码问题解决 以下仅为本人工作.学习过程中所接触到的内容,不足之处欢迎指出. 问题现象: 使用Java代码向MySQL数据库写入数据,中文字符出现乱码. 解决步骤: 1.查 ...

  9. react 学习笔记更新2.0

    1.性能优化 1.shouldComponentUpdate 在render调用之前会调用shouldComponentUpdate,不建议在 shouldComponentUpdate() 中进行深 ...

  10. Chrome 中设置默认搜索引擎为 google.com

    https://google.com/search?q=%s&ref=opensearch&safe=off 那么就可以使搜索结果默认在新标签页打开,同时关闭了搜索结果的安全过滤.   ...