vue中 $bus 一般与 $emit、 $on、 $off 连用,一般用在任意组件间的通信,即 $bus 用来传递非父子关系的数据。
如两个组件之间传递数据:
子组件1

this.$bus.$emit("hello",param);

子组件2

this.$bus.$on("hello",(param)=>{
});

1、$emit

  • $emit(‘自定义事件名’,要传递的数据);
  • 触发当前实例上的自定义事件,要传递的数据会传给监听器;

2、$on

  • $on(‘自定义事件名’,callback);
  • 监听当前实例上自定义事件,callback回调$emit要传递的数据;

注意:$emit 和 $on 的事件必须在一个公共的实例上,才能够触发。

3、实例事件
实例事件就是在构造器外部调用构造器内部的数据。

4、实例
在Student组件中提供数据给另一个School组件

<template><div class="student"><h2>学生姓名:{{name}}</h2><h2>学生性别:{{sex}}</h2><button @click="sendStudentName">把学生名给School组件</button></div>
</template><script>export default {name:'Student',data() {return {name:'曹操',sex:'男',}},methods: {//提供发送数据sendStudentName(){        this.$bus.$emit('hello',this.name)}},}
</script>

在School组件中使用事件总线,接收数据。School组件想接收数据,则在School组件中给 $bus绑定事件,事件的回调则留在School组件自身。

<template><div class="school"><h2>学校名称:{{name}}</h2><h2>学校地址:{{address}}</h2></div>
</template><script>export default {name:'School',data() {return {name:'交通学院',address:'上海',}},mounted() {//绑定当前事件(这里以hello为例)this.$bus.$on('hello',(data)=>{      console.log('我是School组件,收到了数据',data)})},//收尾操作,销毁beforeDestroy(){        this.$bus.$off('hello')  //$off解绑当前组件所用到的事件}}
</script>

其中,$off 解绑当前组件所用到的事件。

5、小结
$emit写在子组件 / 兄弟组件:

  methods: {bgClick() {bus.$emit('getMsg1')bus.$emit('setIndex1')},...},

$on写在父组件 / 兄弟组件:

  mounted() {bus.$on('getMsg1', this.getMsg);bus.$on('setIndex1', this.setIndex);},beforeDestroy() {bus.$off('getMsg1');bus.$off('setIndex1');},

vue中$bus的用法及$emit、$on、$off的使用相关推荐

  1. Vue中$bus的用法及$on、$off的使用

    Vue中 $bus一般与 $on. $off连用,一般用在任意组件间的通讯,所以今天就一起说,这里给大家举一个案例 首先在main.js中配置全局总线 //引入Vue import Vue from ...

  2. Vue 脚手架||Vue 脚手架的基本用法

    Vue 脚手架 Vue 脚手架用于快速生成 Vue 项目基础架构,其官网地址为:https://cli.vuejs.org/zh/ npm install -g @vue/cli 检测是否安装成功  ...

  3. Vue中bus的使用

    vue总线机制(bus) vue中非父子组件之间通信除了使用vuex,也可以通过bus总线,两者适用场景不同. bus适合小项目.数据被更少组件使用的项目,对于中大型项目 数据在很多组件之间使用的情况 ...

  4. vue、bus 使用遇到的坑,组件之间无法传值;vue、bus 第一次获取不到值,后面再点击重复执行

    vue.bus 使用遇到的坑,组件之间无法传值:vue.bus 第一次获取不到值,后面数据叠加 问题定位: 出现无法传值的情况,检查传值过程中组件是否还没有渲染:可能出现的情况是:组件被if,在你使用 ...

  5. vue中directives的用法

    Vue中directives的用法 关于 vue 中 directives 的用法问题,详细可以参考vue官方对directives的解释 当前文章主要讲述directives怎么用,directiv ...

  6. vue中props的用法

    vue使用props的用法 日常编程中都会用到父组件用子组件.子用父的情况,下面先介绍一种子传父的情况 1.在父组件中 (1).首先是在其定义一个list属性以存储其数据值 (2).定义一个绑定属性& ...

  7. vue 插槽 slot 的用法

    vue 插槽 slot 的用法 一.简单定义.使用 slot 二.slot 变量传值 三.跨组件传递 slot 方法1: 多定义一个中间插槽 方法2:使用 scopedSlots 字段 传递作用域插槽 ...

  8. vue中定时器一般用法,定时器函数传参以及清除定时器

    一.vue中定时器一般用法(举个例子) 显示当前时间, setInterval()方法会每秒执行一次函数,类似手表功能: <template><div class="use ...

  9. VUE兄弟组件之间传值,Vue.prototype.bus = new Vue(),this.bus.$on 的使用方法

    举个例子: 组件一中有个分享按钮,点击分享按钮,展示组件二中的分享组件: 组件二分享组件有个取消按钮,点击关闭分享组件. 一.在main.js中添加一个bus实例: Vue.prototype.bus ...

最新文章

  1. 数据蒋堂 | 内存数据集产生的隐性成本
  2. python 错误 Could not find a suitable TLS CA certificate bundle, invalid path 解决方法
  3. Javascript非构造函数的继承
  4. java 连接 oracle 10_java-连接到oracle 10g数据库时,获得IOException“...
  5. linux之head命令
  6. hdu 3641 数论 二分求符合条件的最小值数学杂题
  7. 面试题--------5、==与equals的区别
  8. python第四周作业_马哥2016全新Linux+Python高端运维班第四周作业
  9. “神一般存在”的印度理工学院到底有多牛?
  10. QT设置背景图片以及设置按钮
  11. 还在找一键换发型app?快来看这些一键换发型软件
  12. windows 11远程桌面连接无法使用已保存的凭据密码,每次连接都要求输入的解决方案
  13. ggplot2-堆积柱形图????
  14. C++11之begin、end函数
  15. SpringBoot整合:Druid、MyBatis、MyBatis-Plus、多数据源、knife4j、日志、Redis,Redis的Java操作工具类、封装发送电子邮件等等
  16. mac 怎么降低php版本吗,mac下如何安装不同的php版本以及如何进行切换
  17. E1696 无法打开 源 文件 “QString“
  18. JS 不常用的一些Array方法
  19. CodeForces 1041D Glider 枚举+二分
  20. 攻防世界-MISC:掀桌子

热门文章

  1. 大学四年自学走来,关于怎么学「操作系统」和「计算机网络」我贡献出来了!...
  2. 激光雷达目标识别算法研究综述
  3. java9 响应式编程支持
  4. “梦幻海陆空”三军联合军事演习国防教育活动方案
  5. js 删除数组中指定元素
  6. Python基础-元组字典集合
  7. 【达摩院OpenVI】老片图像上色,一键开源体验
  8. 《鸿门宴传奇》是冯绍峰的传奇
  9. F103固件库Keil工程自动拷贝
  10. C++ Primer Plus(第六版) 第4章 课后编程题