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 + el-form 实现的多层循环表单验证
Nov 25 Vue.js
vue的hash值原理也是table切换实例代码
Dec 14 Vue.js
Vue实现随机验证码功能
Dec 29 Vue.js
vue 页面跳转的实现方式
Jan 12 Vue.js
vue实现简易计算器功能
Jan 20 Vue.js
Vue 3自定义指令开发的相关总结
Jan 29 Vue.js
如何在vue中使用video.js播放m3u8格式的视频
Feb 01 Vue.js
vue实现桌面向网页拖动文件的示例代码(可显示图片/音频/视频)
Mar 01 Vue.js
vue打开新窗口并实现传参的图文实例
Mar 04 Vue.js
Vue的生命周期一起来看看
Feb 24 Vue.js
Vue+TypeScript中处理computed方式
Apr 02 Vue.js
vue/cli 配置动态代理无需重启服务的方法
May 20 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和ACCESS写聊天室(八)
2006/10/09 PHP
PHPThumb PHP 图片缩略图库
2012/03/11 PHP
PHP中fwrite与file_put_contents性能测试代码
2013/08/02 PHP
PHP中foreach()用法汇总
2015/07/02 PHP
简单理解PHP的面向对象编程方式
2016/05/17 PHP
Vagrant(WSL)+PHPStorm+Xdebu 断点调试环境搭建
2019/12/13 PHP
js 遍历对象的属性的代码
2011/12/29 Javascript
仅IE支持clearAttributes/mergeAttributes方法使用介绍
2012/05/04 Javascript
js实现的简洁网页滑动tab菜单效果代码
2015/08/24 Javascript
jQuery文件上传控件 Uploadify 详解
2016/06/20 Javascript
JS实现超简单的汉字转拼音功能示例
2016/12/22 Javascript
AngularJS页面带参跳转及参数解析操作示例
2017/06/28 Javascript
基于jQuery Easyui实现登陆框界面
2017/07/10 jQuery
分享ES6的7个实用技巧
2018/01/18 Javascript
js中getBoundingClientRect的作用及兼容方案详解
2018/02/01 Javascript
Node.js使用supervisor进行开发中调试的方法
2019/03/26 Javascript
vuex的使用和简易实现
2021/01/07 Vue.js
Python MD5文件生成码
2009/01/12 Python
在Python中使用cookielib和urllib2配合PyQuery抓取网页信息
2015/04/25 Python
浅述python中深浅拷贝原理
2018/09/18 Python
浅析python3字符串格式化format()函数的简单用法
2018/12/07 Python
Python如何基于rsa模块实现非对称加密与解密
2020/01/03 Python
TensorBoard 计算图的可视化实现
2020/02/15 Python
python 使用raw socket进行TCP SYN扫描实例
2020/05/05 Python
解决Python数据可视化中文部分显示方块问题
2020/05/16 Python
Pytorch 扩展Tensor维度、压缩Tensor维度的方法
2020/09/09 Python
CHARLES & KEITH澳大利亚官网:新加坡时尚品牌
2019/01/22 全球购物
什么是表空间(tablespace)和系统表空间(System tablespace)
2013/02/25 面试题
干部现实表现材料
2014/02/13 职场文书
工作检讨书怎么写
2015/01/23 职场文书
婚礼家长致辞
2015/07/27 职场文书
为什么你写的height:100%不起作用
2021/05/10 HTML / CSS
Spring Data JPA的Audit功能审计数据库的变更
2021/06/26 Java/Android
SQL Server远程连接的设置步骤(图文)
2022/03/23 SQL Server
Django框架中模型的用法
2022/06/10 Python