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中echarts的用法及与elementui-select的协同绑定操作
Nov 17 Vue.js
Vue router安装及使用方法解析
Dec 02 Vue.js
vue实现防抖的实例代码
Jan 11 Vue.js
Vue实现图书管理案例
Jan 20 Vue.js
Vue.js 带下拉选项的输入框(Textbox with Dropdown)组件
Apr 17 Vue.js
vue引入Excel表格插件的方法
Apr 28 Vue.js
Vue项目中如何封装axios(统一管理http请求)
May 02 Vue.js
vue项目支付功能代码详解
Feb 18 Vue.js
vue使用refs获取嵌套组件中的值过程
Mar 31 Vue.js
vue数据字典取键值项目的字典问题
Apr 12 Vue.js
vue使用localStorage持久性存储实现评论列表
Apr 14 Vue.js
解决vue-router的beforeRouteUpdate不能触发
Apr 14 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边学边教》(02.Apache+PHP环境配置――下篇)
2006/12/13 PHP
PHP中redis的用法深入解析
2014/02/20 PHP
php制作动态随机验证码
2015/02/12 PHP
Zend Framework教程之配置文件application.ini解析
2016/03/10 PHP
zen cart实现订单中增加paypal中预留电话的方法
2016/07/12 PHP
Laravel重写用户登录简单示例
2016/10/08 PHP
php实现的http请求封装示例
2016/11/08 PHP
PHP微信模板消息操作示例
2017/06/29 PHP
xml分页+ajax请求数据源+dom取结果实例代码
2008/10/31 Javascript
RGB颜色值转HTML十六进制(HEX)代码的JS函数
2009/04/25 Javascript
Jquery UI震动效果实现原理及步骤
2013/02/04 Javascript
用jquery存取照片的具体实现方法
2013/06/30 Javascript
NodeJS使用jQuery选择器操作DOM
2015/02/13 NodeJs
js实现动态加载脚本的方法实例汇总
2015/11/02 Javascript
javascript中arguments,callee,caller详解
2016/03/16 Javascript
Nodejs如何搭建Web服务器
2016/03/28 NodeJs
javascript事件处理模型实例说明
2016/05/31 Javascript
js实现html table 行,列锁定的简单实例
2016/10/13 Javascript
用vue和node写的简易购物车实现
2017/04/25 Javascript
利用JS对iframe父子(内外)页面进行操作的方法教程
2017/06/15 Javascript
关于在mongoose中填充外键的方法详解
2017/08/14 Javascript
小程序api实现promise封装过程解析
2019/11/21 Javascript
jquery实现直播弹幕效果
2019/11/28 jQuery
vue简单封装axios插件和接口的统一管理操作示例
2020/02/02 Javascript
[02:05]DOTA2完美大师赛趣味视频之看我表演
2017/11/18 DOTA
在Python中使用异步Socket编程性能测试
2014/06/25 Python
用python写一个windows下的定时关机脚本(推荐)
2017/03/21 Python
python多进程提取处理大量文本的关键词方法
2018/06/05 Python
python使用ctypes库调用DLL动态链接库
2020/10/22 Python
中专生毕业自我鉴定
2013/11/01 职场文书
电子商务专业求职信
2014/07/10 职场文书
升学宴学生致辞
2015/09/29 职场文书
golang协程池模拟实现群发邮件功能
2021/05/02 Golang
Python深度学习之实现卷积神经网络
2021/06/05 Python
nginx内存池源码解析
2021/11/20 Servers
Java基于Dijkstra算法实现校园导游程序
2022/03/17 Java/Android