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中音频wavesurfer.js的使用方法
Feb 20 Vue.js
VUE项目实现主题切换的多种方法
Nov 26 Vue.js
VUE中鼠标滚轮使div左右滚动的方法详解
Dec 14 Vue.js
vue使用require.context实现动态注册路由
Dec 25 Vue.js
Vue项目打包部署到apache服务器的方法步骤
Feb 01 Vue.js
使用vue-element-admin框架从后端动态获取菜单功能的实现
Apr 29 Vue.js
vue完美实现el-table列宽自适应
May 08 Vue.js
如何用vue实现网页截图你知道吗
Nov 17 Vue.js
Vue提供的三种调试方式你知道吗
Jan 18 Vue.js
vue使用wavesurfer.js解决音频可视化播放问题
Apr 04 Vue.js
vue 实现弹窗关闭后刷新效果
Apr 08 Vue.js
Vue OpenLayer 为地图绘制风场效果
Apr 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
html中select语句读取mysql表中内容
2006/10/09 PHP
批量去除PHP文件中bom的PHP代码
2012/03/13 PHP
PHP对表单提交特殊字符的过滤和处理方法汇总
2014/02/18 PHP
PHP生成短网址的思路以及实现方法的详解
2019/03/25 PHP
jQuery学习笔记之控制页面实现代码
2012/02/27 Javascript
javascript自启动函数的问题探讨
2013/10/05 Javascript
基于jQuery插件实现环形图标菜单旋转切换特效
2015/05/15 Javascript
基于jQuery滑动杆实现购买日期选择效果
2015/09/15 Javascript
JS实现星星评分功能实例代码(两种方法)
2016/06/09 Javascript
js仿网易表单及时验证功能
2017/03/07 Javascript
JavaScript实现开关等效果
2017/09/08 Javascript
Mac中安装nvm的教程分享
2017/12/11 Javascript
javaScript实现鼠标在文字上悬浮时弹出悬浮层效果
2020/04/12 Javascript
vue中axios请求的封装实例代码
2019/03/23 Javascript
Vue 使用formData方式向后台发送数据的实现
2019/04/14 Javascript
使用Phantomjs和Node完成网页的截屏快照的方法
2019/07/16 Javascript
微信小程序用户授权、位置授权及获取微信绑定手机号
2019/07/18 Javascript
jquery实现点击弹出对话框
2020/02/08 jQuery
[43:35]TI4 循环赛第二日Liquid vs Fnatic
2014/07/11 DOTA
Python的Flask框架中Flask-Admin库的简单入门指引
2015/04/07 Python
Flask之flask-script模块使用
2018/07/26 Python
flask框架jinja2模板与模板继承实例分析
2019/08/01 Python
python opencv实现图片缺陷检测(讲解直方图以及相关系数对比法)
2020/04/07 Python
Python批量获取并保存手机号归属地和运营商的示例
2020/10/09 Python
python中类与对象之间的关系详解
2020/12/16 Python
Skyscanner阿联酋:全球领先的旅游搜索平台
2017/11/25 全球购物
Orlebar Brown官网:设计师泳裤和泳装
2020/12/08 全球购物
医学生求职自荐信
2013/10/25 职场文书
商务英语应届生自我鉴定
2013/12/08 职场文书
高三自我评价
2014/02/01 职场文书
勤奋学习演讲稿
2014/05/10 职场文书
十八大演讲稿
2014/05/22 职场文书
软环境建设心得体会
2014/09/09 职场文书
高中生综合素质自我评价
2015/03/06 职场文书
MySQL创建高性能索引的全步骤
2021/05/02 MySQL
Mysql数据库索引面试题(程序员基础技能)
2021/05/31 MySQL