vue之bus总线的简单使用解读

作者:牛先森家的牛奶 时间:2024-06-05 15:30:41 

vue bus总线的使用

场景描述

A组件中包括B,C组件,而B组件中包括D组件,这时如果D组件想要在A组件中触发C组件的方法怎么办呢?

当然方案是有的,用状态管理vuex可以,用$emit传递也可以,但是我想试着用的是bus总线的方式;

如下所示

D组件中触发bus的emit ,然后在A组件中用bus总线的on来触发方法;

D组件中

dataLoad(){
   console.log('加载完触发事件');
   this.$bus.$emit('itemDataLoad') 
   // this.$bus.$emit('事件名称', 参数) // 第二个可以为参数
},

A组件中

 mounted() {
    // 监听item中数据加载完
    this.$bus.$on('itemDataLoad', () => {
      console.log('数据加载完');
    })
    // this.$bus.$on('事件名称', 回调函数(参数))
  },

当然在A组件中通过 this.$refs 的方式就可以触发C组件中的事件等

还有一步骤是 $bus 默认是不存在的啊,打印试试this.$bus为undefined啊;

别急,在main.js中加上$bus;

// bus总线 vue实例
Vue.prototype.$bus = new Vue()

当然可以在生命周期中移除bus总线;

this.$bus.$off();

记录封装的防抖函数

// 防抖函数
  debounce: function (fun, delay) {
    let timer = null
    // 接收调用函数时传入的参数的值 ...args 可多个
    return function (...args) {
      if (tiemr) return
      timer = setTimeout(() => {
        fun.apply(this, args)
      }, delay);
    }
  }

const refresh = debounce(xxx, 500)

refresh('参数1', '参数2', '参数3')

bus总线的原理解析

关于官方介绍 从 Vue 1.x 迁移 — Vue.js

vue之bus总线的简单使用解读

vue之bus总线的简单使用解读

 在官方文档中对bus总线的介绍是使用,但是明确指出了复杂情况推荐使用vuex实现非父子组件直接的传值,bus总线应用在简单的项目

1.怎么理解bus总线

bus总线就是一个中间组件,触发事件,触发中间组件,监听中间组件的变化

vue之bus总线的简单使用解读

2.bus组件存在的条件和注册

  • 1.所有组件都可以访问

  • 2.可以使用$emit,$on,$off

在项目过程中要满足这两点需求

1.所有组件都可访问

在vue的项目中,要所有组件都可以访问,那么一定在vue进行实例化之前就准备好,就是下图红色部分

vue之bus总线的简单使用解读

2.可以使用$emit,$on,$off

有$emit,$on,$off的一定是vue的实例对象vc,或者vueComponent的实例对象vm

挂载到哪都可以访问?必然是原型上

vue.prototype.$bus = vue的实例对象/vueComponent的实例对象

第一种:

Vue.prototype.$bus = vueComponent的实例对象(所有的vueComponent的实例对象都是(Vue.extentd构造的)

vue之bus总线的简单使用解读

第二种:

在生命周期创建之前 Vue.prototype.$bus = vue的实例对象

vue之bus总线的简单使用解读

第三种:

利用插件进行挂载

安装 - npm install vue-bus

注册使用:

import VueBus from 'vue-bus';

Vue.use(VueBus)

3.使用 

触发事件

this.$bus.$emit('事件名', 值)

监听事件

create() {
 this.$bus.$on('事件名', (值) = > {
 })
}

销毁事件

this.$bus.$off('事件名')

在理解bus总线的前提,是需要理解,为什么写在vue的原型上就可以访问?可以自行思考一下,涉及了一些vue的原理

来源:https://blog.csdn.net/weixin_42681295/article/details/119078712

标签:vue,bus,总线
0
投稿

猜你喜欢

  • c#数据库与TXT导入导出的实例

    2024-01-24 06:34:16
  • pandas中Timestamp类用法详解

    2022-12-06 14:30:54
  • python基础教程之csv格式文件的写入与读取

    2021-05-24 09:20:12
  • Python退火算法在高次方程的应用

    2023-09-07 22:39:30
  • PHP curl get post 请求的封装函数示例【get、post、put、delete等请求类型】

    2023-05-25 01:24:18
  • win2008 R2 WEB环境配置之MYSQL 5.6.22安装版安装配置方法

    2024-01-25 10:25:17
  • pytest解读一次请求多个fixtures及多次请求

    2023-07-20 01:13:43
  • python深度学习之多标签分类器及pytorch实现源码

    2022-09-26 01:09:12
  • golang gorm更新日志执行SQL示例详解

    2024-04-23 09:46:24
  • php实现mysql同步的实现方法

    2023-11-24 13:58:56
  • JS代码格式化和语法着色V2

    2023-07-02 05:18:27
  • MySQL 连接与管理

    2011-09-10 15:52:42
  • 简单获取键盘的KeyCode

    2008-04-18 12:37:00
  • python 实现音频叠加的示例

    2022-10-02 21:53:38
  • python 处理dataframe中的时间字段方法

    2021-04-27 05:21:33
  • Python实现识别图片为文字的示例代码

    2022-01-02 14:57:48
  • 简单了解SQL常用删除语句原理区别

    2024-01-14 22:38:57
  • ACCESS转SQL Server2000需要注意的问题

    2007-11-18 15:25:00
  • Python编程之string相关操作实例详解

    2023-01-05 04:17:47
  • 错误的随机数_JavaScript

    2009-08-28 12:43:00
  • asp之家 网络编程 m.aspxhome.com