1、全局事件总线基础知识(GlobalEventBus)

1、一种组件间通信的方式,适用于任意组件间通信。

2、安装全局事件总线:

提示:在main.js中安装全局事件总线

  1. new Vue({
  2. ......
  3. beforeCreate() {
  4. Vue.prototype.$bus = this //安装全局事件总线,$bus就是当前应用的vm
  5. },
  6. ......
  7. })

3、使用事件总线:

  1. 接收数据:A组件想接收数据,则在A组件中给$bus绑定自定义事件,事件的回调留在A组件自身。
  1. methods(){
  2. demo(data){......}
  3. }
  4. ......
  5. mounted() {
  6. this.$bus.$on('xxxx',this.demo)
  7. }
  1. 提供数据:this.$bus.$emit('xxxx',数据)

4、最好在beforeDestroy钩子中,用$off去解绑当前组件所用到的事件。


2、图解过程

3、代码实例

实现组件间的通信(通过全局事件总线)

3.1 main.js

  1. //引入Vue
  2. import Vue from 'vue'
  3. //引入App
  4. import App from './App.vue'
  5. //关闭Vue的生产提示
  6. Vue.config.productionTip = false
  7. //创建vm
  8. new Vue({
  9. el:'#app',
  10. render: h => h(App),
  11. beforeCreate() {
  12. Vue.prototype.$bus = this
  13. },
  14. })

3.1 App.vue

  1. <template>
  2. <div class="app">
  3. <h1>{{msg}}</h1>
  4. <School/>
  5. <Student/>
  6. </div>
  7. </template>
  8. <script>
  9. import Student from './components/Student'
  10. import School from './components/School'
  11. export default {
  12. name:'App',
  13. components:{School,Student},
  14. data() {
  15. return {
  16. msg:'你好啊!',
  17. }
  18. }
  19. }
  20. </script>
  21. <style scoped>
  22. .app{
  23. background-color: gray;
  24. padding: 5px;
  25. }
  26. </style>

3.2 School.vue

  1. <template>
  2. <div class="school">
  3. <h2>学校名称:{{name}}</h2>
  4. <h2>学校地址:{{address}}</h2>
  5. </div>
  6. </template>
  7. <script>
  8. export default {
  9. name:'School',
  10. data() {
  11. return {
  12. name:'尚硅谷',
  13. address:'北京',
  14. }
  15. },
  16. mounted() {
  17. // console.log('School',this)
  18. this.$bus.$on('hello',(data)=>{
  19. console.log('我是School组件,收到了数据',data)
  20. })
  21. },
  22. beforeDestroy() {
  23. this.$bus.$off('hello')
  24. },
  25. }
  26. </script>
  27. <style scoped>
  28. .school{
  29. background-color: skyblue;
  30. padding: 5px;
  31. }
  32. </style>

3.3 Student.vue

  1. <template>
  2. <div class="student">
  3. <h2>学生姓名:{{name}}</h2>
  4. <h2>学生性别:{{sex}}</h2>
  5. <button @click="sendStudentName">把学生名给School组件</button>
  6. </div>
  7. </template>
  8. <script>
  9. export default {
  10. name:'Student',
  11. data() {
  12. return {
  13. name:'张三',
  14. sex:'男',
  15. }
  16. },
  17. mounted() {
  18. // console.log('Student',this.x)
  19. },
  20. methods: {
  21. sendStudentName(){
  22. this.$bus.$emit('hello',this.name)
  23. }
  24. },
  25. }
  26. </script>
  27. <style lang="less" scoped>
  28. .student{
  29. background-color: pink;
  30. padding: 5px;
  31. margin-top: 30px;
  32. }
  33. </style>

Vue学习之--------全局事件总线(2022/8/22)的更多相关文章

  1. 如何在 pyqt 中实现全局事件总线

    前言 在 Qt 中可以使用信号和槽机制很方便地实现部件之间的通信,考虑下面这样的场景: 我想要点击任意一个专辑卡并通知主界面跳转到专辑界面,那么一种实现方式如上图所示:点击任意一个蓝色方框所示的专辑卡 ...

  2. 组件通信之全局事件总线 & 消息订阅发布

    全局事件总线 介绍 一种组件间通信的方式,适用于任意组件间通信. 在使用全局事件总线之前需要一些知识准备 所有组件实例的原型对象的原型对象就是 Vue 的原型对象,即VueComponent.prot ...

  3. 记一笔vue中的中央事件总线的问题,以及解决方案

    代码结构:首先HeaderNav组件是被单独拎出来的,router-view中就对应了内容组件,由于有时候i有的界面的header内容是不一样的,因此要用到兄弟组件的相互通信,这个时候我首先选择了bu ...

  4. vue学习笔记(四)事件处理器

    前言 在上一章vue学习笔记(三)class和style绑定的内容中,我们学习了如何在vue中绑定class和style,介绍了常用的绑定方法,class的数组绑定和对象绑定以及style的数组绑定和 ...

  5. vue兄弟组件传值——事件总线

    1.创建一个js文件,例如msg.js,放到合适位置,例如components中,或者其他位置也行.然后在兄弟两个组件中分别引入msg.js文件 msg.js: import Vue from 'vu ...

  6. Vue学习之全局和私有组件小结(七)

    一.组件: 组件的出现,就是为了拆分Vue实例的代码量的,能够让我们以不同的组件,来划分不同的功能模块,将来我们需要什么样的功能,就可以去调用相应的组件即可. 二.组件和模块: 1.模块化:是从代码逻 ...

  7. Vue bus的使用(兄弟|非父子组件传值)-->可以使用一个空的Vue实例作为中央事件总线new Vue()

    1.在main.js中注册全局的bus  Vue.prototype.bus=new Vue(); 2.在组建中使用 子组建使用:this.bus.$emit('自定义事件名',data) metho ...

  8. 38.VUE学习之-全局组件和局部组件

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...

  9. 29.VUE学习之--键盘事件.键盘修饰符的实例讲解

    键盘事件 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF- ...

随机推荐

  1. 产品 | GreatSQL,打造更好的MGR生态

    欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答 GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 用 ...

  2. 详解ConCurrentHashMap源码(jdk1.8)

    ConCurrentHashMap是一个支持高并发集合,常用的集合之一,在jdk1.8中ConCurrentHashMap的结构和操作和HashMap都很类似: 数据结构基于数组+链表/红黑树. ge ...

  3. 在.NET 6.0中使用不同的托管模型

    大家好,我是张飞洪,感谢您的阅读,我会不定期和你分享学习心得,希望我的文章能成为你成长路上的垫脚石,让我们一起精进. 本章是<定制ASP NET 6.0框架系列文章>的第六篇.在本章中,我 ...

  4. 一文搞懂EMAS Serverless小程序开发|电子书免费下载

    >> 快来免费下载|电子书<五天玩转 EMAS Serverless> << 点击免费下载 <五天玩转 EMAS Serverless> EMAS Se ...

  5. 未关中断情况下的hardlock

    最近遇到一例crash,3.10内核,hardlock,查看对应的堆栈,中断是使能的. 查看对应的hrtimer_interrupts和hrtimer_interrupt_save的值,发现确实相等. ...

  6. 【AGC】如何快速部署Serverless Url缩短模板

    使用场景 Serverless短URL生成模板实现您将在云数据库服务中URL缩短的诉求.使用此模板后,仅需在云数据库服务侧配置长URL值.Serverless短URL生成模板会在后台与Bitly AP ...

  7. 计算机网络-DNS和HTTPDNS了解

    DNS 和 HTTPDNS DNS 域名解析的过程 传统 DNS 存在的问题 1.域名缓存问题 2.域名转发问题 3.出口 NAT 问题 4.DNS 域名更新问题 5.解析延迟问题 6.运营商劫持 H ...

  8. [CF1386C] Joker (IOI 赛制,分治,整体二分+可回退并查集)

    题面 给一个 N N N 点 M M M 边的简单无向图,询问 Q Q Q 次,每次问你把编号在 [ l i , r i ] [l_i,r_i] [li​,ri​] 之间的边删掉后,该图是否存在奇数环 ...

  9. Keepalived之简单有效的配置

    1.简介 官网地址:https://www.keepalived.org/ 源码包下载地址:https://www.keepalived.org/download.html Keepalived是一种 ...

  10. 来点基础的练习题吧,看见CSDN这类基础的代码不多

    来点基础的练习题吧,看见CSDN这类基础的代码不多 //正三角形 void ex03(){ int i,k=0, rows, space; printf("请输入三角形的层次:") ...