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 相关文章推荐
一篇超完整的Vue新手入门指导教程
Nov 18 Vue.js
浅析VUE防抖与节流
Nov 24 Vue.js
详解vue-cli项目在IE浏览器打开报错解决方法
Dec 10 Vue.js
Vue 实例中使用$refs的注意事项
Jan 29 Vue.js
Vue实现圆环进度条的示例
Feb 06 Vue.js
idea编译器vue缩进报错问题场景分析
Jul 04 Vue.js
SSM VUE Axios详解
Oct 05 Vue.js
Vue提供的三种调试方式你知道吗
Jan 18 Vue.js
vue cli4中mockjs在dev环境和build环境的配置详情
Apr 06 Vue.js
vue如何在data中引入图片的正确路径
Jun 05 Vue.js
Vue2项目中对百度地图的封装使用详解
Jun 16 Vue.js
Vue router配置与使用分析讲解
Dec 24 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
世界上第一台立体声收音机
2021/03/01 无线电
做个自己站内搜索引擎
2006/10/09 PHP
PHP学习之PHP表达式
2006/10/09 PHP
PHP数据库万能引擎类adodb配置使用以及实例集锦
2014/06/12 PHP
Linux系统递归生成目录中文件的md5的方法
2015/06/29 PHP
php 数组随机取值的简单实例
2016/05/23 PHP
JCalendar 日历控件 v1.0 beta[兼容IE&amp;Firefox] 有文档和例子
2007/05/30 Javascript
jQuery 位置插件
2008/12/25 Javascript
javascript之学会吝啬 精简代码
2010/04/25 Javascript
jquery实现按Enter键触发事件示例
2013/09/10 Javascript
javascript中typeof的使用示例
2013/12/19 Javascript
Jquery实现的角色左右选择特效
2014/05/21 Javascript
使用ajaxfileupload.js实现ajax上传文件php版
2014/06/26 Javascript
jquery ajax请求方式与提示用户正在处理请稍等
2014/09/01 Javascript
js实现透明度渐变效果的方法
2015/04/10 Javascript
Javascript实现颜色rgb与16进制转换的方法
2015/04/18 Javascript
Bootstrap学习笔记之css组件(3)
2016/06/07 Javascript
JavaScript程序中实现继承特性的方式总结
2016/06/24 Javascript
浅谈JavaScript中面向对象的的深拷贝和浅拷贝
2016/08/01 Javascript
JavaScript 轮播图和自定义滚动条配合鼠标滚轮分享代码贴
2016/10/28 Javascript
关于Mac下安装nodejs、npm和cnpm的教程
2018/04/11 NodeJs
浅谈javascript错误处理
2019/08/11 Javascript
五句话帮你轻松搞定js原型链
2020/12/09 Javascript
Python简单实现enum功能的方法
2016/04/25 Python
开源Web应用框架Django图文教程
2017/03/09 Python
Python3 Post登录并且保存cookie登录其他页面的方法
2018/12/28 Python
Pytorch to(device)用法
2020/01/08 Python
Python实现代码块儿折叠
2020/04/15 Python
python如何调用java类
2020/07/05 Python
在pycharm中文件取消用 pytest模式打开的操作
2020/09/01 Python
解决pycharm导入numpy包的和使用时报错:RuntimeError: The current Numpy installation (‘D:\\python3.6\\lib\\site-packa的问题
2020/12/08 Python
人事专员的岗位职责
2014/03/01 职场文书
精神文明单位申报材料
2014/05/02 职场文书
技术负责人任命书
2014/06/05 职场文书
乡镇个人对照检查材料
2014/08/22 职场文书
春节慰问简报
2015/07/21 职场文书