夜猫子的知识栈 夜猫子的知识栈
首页
  • 前端文章

    • JavaScript
  • 学习笔记

    • 《JavaScript教程》
    • 《Web Api》
    • 《ES6教程》
    • 《Vue》
    • 《React》
    • 《TypeScript》
    • 《Git》
    • 《Uniapp》
    • 小程序笔记
    • 《Electron》
    • JS设计模式总结
  • 《前端架构》

    • 《微前端》
    • 《权限控制》
    • monorepo
  • 全栈项目

    • 任务管理日历
    • 无代码平台
    • 图书管理系统
  • HTML
  • CSS
  • Nodejs
  • Midway
  • Nest
  • MySql
  • 其他
  • 技术文档
  • GitHub技巧
  • 博客搭建
  • Ajax
  • Vite
  • Vitest
  • Nuxt
  • UI库文章
  • Docker
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

夜猫子

前端练习生
首页
  • 前端文章

    • JavaScript
  • 学习笔记

    • 《JavaScript教程》
    • 《Web Api》
    • 《ES6教程》
    • 《Vue》
    • 《React》
    • 《TypeScript》
    • 《Git》
    • 《Uniapp》
    • 小程序笔记
    • 《Electron》
    • JS设计模式总结
  • 《前端架构》

    • 《微前端》
    • 《权限控制》
    • monorepo
  • 全栈项目

    • 任务管理日历
    • 无代码平台
    • 图书管理系统
  • HTML
  • CSS
  • Nodejs
  • Midway
  • Nest
  • MySql
  • 其他
  • 技术文档
  • GitHub技巧
  • 博客搭建
  • Ajax
  • Vite
  • Vitest
  • Nuxt
  • UI库文章
  • Docker
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 基础

  • 响应式

  • 组件

  • 过渡&动画

  • 可复用性

  • 工具

  • 规模化

  • 路由(核心)

  • 组合式

  • Vuex

  • Pinia

  • 其他

    • 手动渲染虚拟dom
    • 全局事件总线($bus)
      • 作用
      • 实现原理
        • 1.其必须能让所有组件获取到
        • 2.能够添加绑定事件
      • 运用
    • 全局方法和属性 createAPP
    • Vue3-TS 中使用 Express
    • watch监听Props属性值失败原因
    • main.js推荐配置
    • 脚手架前期基础配置
    • 跨域之config.js配置
    • Vue中的防抖函数封装和使用
    • vue的数据更新
    • 操作本地缓存
    • api使用流程
    • ajax封装及api的获取和配置
    • vue解析n字符
    • TS获取ref绑定元素
    • 解决vue3中Props无法引入外部类型
    • vue2升vue3注意事项
  • Vue3 源码学习记录

  • 《Vue》笔记
  • 其他
夜猫子
2022-04-13
目录

全局事件总线($bus)

# 全局事件总线

# 作用

通过自定义事件添加到某一个公共对象上,以其为枢纽,来实现任意组件之间的通讯

# 实现原理

# 1.其必须能让所有组件获取到

方法: (1)添加到VC的原型上 (由于实际并没有总构造函数VueComonent这样一个概念,因为只有创建了一个组件以后才会创建出一个全新的VC,要添加只能在该组件里通过隐式原型来添加,比较麻烦,不推荐)。 (2)顺着VC原型再往上找添加到Vue的原型上(推荐)

# 2.能够添加绑定事件

因为v-on这些修饰符和指令是存在于Vue原型对象上的,要想使用就必须是vm或VC (1)通过创建一个新vc来实现

const vc=Vue.extend({})
const transVc=new vc()
Vue.prototype.$bus=transVc//因此所有组件上都有$bus(为了语义化而取此名,也可以取其他的名),且为一个VC实例对象
1
2
3

(2)通过已有的vm实例来实现(推荐)

//Vue.prototype.x=vm//无法在前面添加因为vm还未创建
const vm = new Vue({
 el:"#app",
 render: h => h(App),
 beforeCreate(){//利用生命周期函数在创建vm后就立即添加
 Vue.prototype.$bus=this
  }
})
Vue.prototype.x=transVc//也无法在后面加因为加晚了,此时页面已经挂载完毕
1
2
3
4
5
6
7
8
9

# 运用

组件一(绑定自定义事件并,接收数据)

mounted() {
 this.$bus.$on("hello", (getit) => {
 console.log("组件一已收到", getit);
    });
  }
1
2
3
4
5

组件二(发送数据)

<template>
 <div>
 <button @click="send">点我发送数据给组件一</button>
 </div>
</template>
<script>
export default {
 name: "City",
 data() {
 return {
 cityName: "北京",
    };
  },
 methods: {
 send(){
 this.$bus.$emit('hello',this.cityName)
    }
  }
};
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
编辑 (opens new window)
上次更新: 2023/7/11 18:57:41
手动渲染虚拟dom
全局方法和属性 createAPP

← 手动渲染虚拟dom 全局方法和属性 createAPP→

最近更新
01
IoC 解决了什么痛点问题?
03-10
02
如何调试 Nest 项目
03-10
03
Provider注入对象
03-10
更多文章>
Copyright © 2019-2025 Study | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式