清淨
  • Java

    • Java 基础
  • 框架

    • Flyway
    • MapStruct
    • Spring Cloud
  • 中间件

    • Elasticsearch
    • Redis
    • RabbitMQ
    • Kafka
  • 三剑客

    • HTML
    • CSS
    • JavaScript
  • 进阶

    • jQuery
    • ECMAScript6
    • TypeScript
  • Vue

    • Vue2
    • Vue3
    • VuePress
  • Linux
  • Jenkins
  • Maven
  • MySQL
  • 插件工具
  • 代码集成
  • 其它

    • 数据结构与算法
    • 计算机网络
    • 操作系统
    • 设计模式
迁移日志
订阅号
微信订阅号
微信订阅号
GitHub
  • Java

    • Java 基础
  • 框架

    • Flyway
    • MapStruct
    • Spring Cloud
  • 中间件

    • Elasticsearch
    • Redis
    • RabbitMQ
    • Kafka
  • 三剑客

    • HTML
    • CSS
    • JavaScript
  • 进阶

    • jQuery
    • ECMAScript6
    • TypeScript
  • Vue

    • Vue2
    • Vue3
    • VuePress
  • Linux
  • Jenkins
  • Maven
  • MySQL
  • 插件工具
  • 代码集成
  • 其它

    • 数据结构与算法
    • 计算机网络
    • 操作系统
    • 设计模式
迁移日志
订阅号
微信订阅号
微信订阅号
GitHub
  • Vue2

    • 简介
    • 起步
    • Vue 实例
    • Vue 指令
    • 监听数据变化
    • 操作 DOM
    • 组件化
    • 模块化
    • webpack
    • Vue CLI
    • Vue-Router
    • Vuex
    • 事件总线 $bus
    • 混入 Mixin
    • better-scroll
    • Axios
    • Vue 细节补充
    • 项目中遇到的问题

事件总线 $bus

在某些情况下,我们可能需要从一个组件发送事件到另一个组件,如果它们直接没有直接的联系,我们可能需要依次向它们的父组件传递事件,这样显得稍微麻烦,我们可以使用 Vuex 来解决这个问题。但是,Vuex 中保存的是状态(变量),有时候可能无法直接处理事件,这时,我们呢可以使用 Vue 中的事件总线 $bus。

$bus 类似 Vuex,只要有一个组件发射了事件,那么,其它任何组件都可以接收到这个事件。但是,Vue 中并没有直接提供 $bus,所以,需要我们自己进行某些处理,如下:

  • main.js

    // 定义事件总线
    Vue.prototype.$bus = new Vue()
    
  • GoodsListItem.vue

    <template>
      <div class="goods-item">
        <!-- Vue 内置函数 @load 用来监听图片是否加载完成,类似 js 中的 img.onload = function -->
        <img :src="item.image" alt="" @load="imageLoad">
        <!-- ... -->
      </div>
    </template>
    
    <script>
      export default {
        methods: {
          imageLoad() {
            // 使用事件总线发送事件
            this.$bus.$emit('goodsItemImgLoad')
          }
        }
      }
    </script>
    
  • Home.vue

    export default {
      created() {
        // 接收事件
        this.$bus.$on('goodsItemImgLoad', () => {
          this.$refs.scroll.refresh()
        })
      },
    }
    
想要编辑此页?
上次更新: 2023/3/18 19:48
贡献者: djf
←Vuex混入 Mixin→
[ 纸上得来终觉浅绝知此事要躬行 ]
Copyright © 2021-present Junfeng Dai
蜀ICP备2021009537号