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-cli 创建模板项目
Nov 19 Vue.js
Vue 的 v-model用法实例
Nov 23 Vue.js
vue3.0中setup使用(两种用法)
Dec 02 Vue.js
vue+openlayers绘制省市边界线
Dec 24 Vue.js
Vue过滤器,生命周期函数和vue-resource简单介绍
Jan 12 Vue.js
vue二选一tab栏切换新做法实现
Jan 19 Vue.js
Vue 实例中使用$refs的注意事项
Jan 29 Vue.js
Vue过滤器(filter)实现及应用场景详解
Jun 15 Vue.js
vue实现锚点定位功能
Jun 29 Vue.js
vue实现Toast组件轻提示
Apr 10 Vue.js
解决vue中provide inject的响应式监听
Apr 19 Vue.js
vue ant design 封装弹窗表单的使用
Jun 01 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
用PHP 4.2书写安全的脚本
2006/10/09 PHP
如何在PHP中使用Oracle数据库(4)
2006/10/09 PHP
下载文件的点击数回填
2006/10/09 PHP
typecho插件编写教程(一):Hello World
2015/05/28 PHP
PHP中set error handler函数用法小结
2015/11/11 PHP
PHP的Yii框架的常用日志操作总结
2015/12/08 PHP
Zend Framework教程之模型Model基本规则和使用方法
2016/03/04 PHP
js function使用心得
2010/05/10 Javascript
精通Javascript系列之数值计算
2011/06/07 Javascript
40款非常棒的jQuery 插件和制作教程(系列二)
2011/11/02 Javascript
JS实现的省份级联实例代码
2013/06/24 Javascript
开启BootStrap学习之旅
2016/05/04 Javascript
浅谈JS使用[ ]来访问对象属性
2016/09/21 Javascript
微信小程序中单位rpx和rem的使用
2016/12/06 Javascript
Angular.js自定义指令学习笔记实例
2017/02/24 Javascript
Google 爬虫如何抓取 JavaScript 的内容
2017/04/07 Javascript
H5图片压缩与上传实例
2017/04/21 Javascript
ztree简介_动力节点Java学院整理
2017/07/19 Javascript
React从react-router路由上做登陆验证控制的方法
2018/05/10 Javascript
弱类型语言javascript开发中的一些坑实例小结【变量、函数、数组、对象、作用域等】
2019/08/07 Javascript
Node 代理访问的实现
2019/09/19 Javascript
JS在Array数组中按指定位置删除或添加元素对象方法示例
2019/11/19 Javascript
Javascript 模拟mvc实现点餐程序案例详解
2020/12/24 Javascript
浅谈python中的数字类型与处理工具
2017/08/02 Python
解决Python中list里的中文输出到html模板里的问题
2018/12/17 Python
python两个_多个字典合并相加的实例代码
2019/12/26 Python
Python绘制全球疫情变化地图的实例代码
2020/04/20 Python
python操作微信自动发消息的实现(微信聊天机器人)
2020/07/14 Python
Python3 用什么IDE开发工具比较好
2020/11/28 Python
python使用numpy中的size()函数实例用法详解
2021/01/29 Python
英国假发网站:Hothair
2018/02/23 全球购物
大学生的自我鉴定范文
2014/01/21 职场文书
环保建议书500字
2014/05/14 职场文书
职务任命书范本
2014/06/05 职场文书
应届生找工作求职信
2014/06/24 职场文书
专家推荐信怎么写
2015/03/25 职场文书