Vue全局事件总线你了解吗


Posted in Vue.js onFebruary 24, 2022

全局事件总线,是组件间的一种通信方式,适用于任何组件间通信。

看下面具体的例子。

父组件:App

<template>
    <div class="app">
        <Company/>
        <Employee/>
    </div>
</template>

<script>
import Company from "./components/Company.vue";
import Employee from "./components/Employee.vue";

export default {
    components:{
        Company,
        Employee
    }
}
</script>

<style>
.app{
    background: gray;
    padding: 5px;
}
.btn{
    margin-left:10px;
    line-height: 30px;
    background: ivory;
    border-radius: 5px;
}
</style>

子组件:Company和Employee

<template>
  <div class="company">
      <h2>公司名称:{{name}}</h2>
      <h2>公司地址:{{address}}</h2>
      <button @click="sendMessage">点我发送</button>
  </div>
</template>

<script>
export default {
    name:"Company",
    data(){
        return {
            name:"五哈技术有限公司",
            address:"上海宝山"
        }
    },
    methods:{
        sendMessage(){
            console.log("Company组件发送数据:",this.name);
            this.$bus.$emit("demo",this.name);
        }
    }

}    
</script>

<style scoped>
.company{
    background: orange;
    background-clip: content-box;
    padding: 10px;
}
</style>
<template>
  <div class="employee">
      <h2>员工姓名:{{name}}</h2>
      <h2>员工年龄:{{age}}</h2>
  </div>
</template>

<script>
export default {
    name:"Employee",
    data(){
        return {
            name:"张三",
            age:25
        }
    },
    mounted(){
        this.$bus.$on("demo",(data) => {
            console.log("Employee组件监听demo,接收数据:",data);
        })
    },
    beforeDestroy() {
        this.$bus.$off("demo");
    }
}

</script>

<style scoped>
.employee{
    background: skyblue;
    background-clip: content-box;
    padding: 10px;
}
</style>

入口文件:main.js

import Vue from 'vue';  
import App from './App.vue';

Vue.config.productionTip = false;

new Vue({
  el:"#app",
  render: h => h(App),
  beforeCreate(){ 
    Vue.prototype.$bus = this;
  }
})

父组件App,子组件CompanyEmployee

子组件Company和Employee之间通过全局数据总线进行数据传递。

在main.js中,定义了全局事件总线:$bus

$bus定义在Vue.prototype,因此$bus对所有组件可见,即所有组件可通过this.$bus访问。

$bus被赋值为this,即vm实例,因此$bus拥有vm实例上的所有属性和方法,如$emit$on$off等。

new Vue({
  beforeCreate(){ 
    Vue.prototype.$bus = this;
  }
})

使用全局事件总线

$bus.$on,监听事件。Employee组件中定义了监听事件,监听demo事件;

$bus.$emit,触发事件。Company组件中定义了触发事件,点击按钮执行sendMessage回调,该回调将触发demo事件。

Vue全局事件总线你了解吗

Vue全局事件总线你了解吗

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注三水点靠木的更多内容!   

Vue.js 相关文章推荐
vue3.0实现点击切换验证码(组件)及校验
Nov 18 Vue.js
vue组件中节流函数的失效的原因和解决方法
Dec 02 Vue.js
利用Vue实现简易播放器的完整代码
Dec 30 Vue.js
如何在vue 中使用柱状图 并自修改配置
Jan 21 Vue.js
手动实现vue2.0的双向数据绑定原理详解
Feb 06 Vue.js
vue打开新窗口并实现传参的图文实例
Mar 04 Vue.js
vue+django实现下载文件的示例
Mar 24 Vue.js
Vue Element UI自定义描述列表组件
May 18 Vue.js
Vue h函数的使用详解
Feb 18 Vue.js
vue中div禁止点击事件的实现
Apr 02 Vue.js
Vue操作Storage本地化存储
Apr 29 Vue.js
Vue的生命周期一起来看看
Vue的过滤器你真了解吗
Feb 24 #Vue.js
Vue监视数据的原理详解
Feb 24 #Vue.js
Vue的列表之渲染,排序,过滤详解
Vue3如何理解ref toRef和toRefs的区别
Feb 18 #Vue.js
Vue h函数的使用详解
Feb 18 #Vue.js
详解Vue中$props、$attrs和$listeners的使用方法
Feb 18 #Vue.js
You might like
全国中波电台频率表
2020/03/11 无线电
用PHP调用数据库的存贮过程!
2006/10/09 PHP
PHP循环语句笔记(foreach,list)
2011/11/29 PHP
php post大量数据时发现数据丢失问题解决方法
2015/06/20 PHP
php商品对比功能代码分享
2015/09/24 PHP
搭建Vim为自定义的PHP开发工具的一些技巧
2015/12/11 PHP
PHP重置数组为连续数字索引的几种方式总结
2018/03/12 PHP
Javascript中的数学函数集合
2007/05/08 Javascript
JQuery 插件制作实践 xMarquee插件V1.0
2010/04/02 Javascript
JQuery扩展插件Validate 1 基本使用方法并打包下载
2011/09/05 Javascript
jquery 选择器引擎sizzle浅析
2013/02/06 Javascript
JS+CSS模拟可以无刷新显示内容的留言板实例
2015/03/03 Javascript
Bootstrap每天必学之轮播(Carousel)插件
2016/04/25 Javascript
angular实现商品筛选功能
2017/02/01 Javascript
JS简单添加元素新节点的方法示例
2018/02/10 Javascript
vue用递归组件写树形控件的实例代码
2018/07/19 Javascript
vue-router传参用法详解
2019/01/19 Javascript
vue canvas绘制矩形并解决由clearRec带来的闪屏问题
2019/09/02 Javascript
微信小程序开发打开另一个小程序的实现方法
2020/05/17 Javascript
Vue2.0 ES6语法降级ES5的操作
2020/10/30 Javascript
vue 插槽简介及使用示例
2020/11/19 Vue.js
[55:54]FNATIC vs EG 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
在Python中使用HTMLParser解析HTML的教程
2015/04/29 Python
PyTorch上实现卷积神经网络CNN的方法
2018/04/28 Python
Python判断对象是否相等及eq函数的讲解
2019/02/25 Python
python爬虫 基于requests模块发起ajax的get请求实现解析
2019/08/20 Python
python3+opencv生成不规则黑白mask实例
2020/02/19 Python
Python爬取豆瓣数据实现过程解析
2020/10/27 Python
荷兰本土平价百货:HEMA
2017/10/23 全球购物
意大利在线药房:shop-farmacia.it
2019/03/12 全球购物
英国在线药房:Chemist.co.uk
2019/03/26 全球购物
服务之星事迹材料
2014/05/03 职场文书
幼儿园六一儿童节活动方案
2014/08/26 职场文书
合同权益转让协议书模板
2014/11/18 职场文书
JavaScript如何优化逻辑判断代码详解
2021/06/08 Javascript
详解Redis的三种常用的缓存读写策略步骤
2022/05/06 Redis