21.兄弟组件传参和Bus


1.借助父组件传参





父组件为 App 子组件为 A 和 B 他两个是同级的, A 组件派发事件通过 App.vue 接受 A 组件派发的事件然后在 Props 传给 B 组件 也是可以实现的

缺点就是比较麻烦 ,无法直接通信,只能充当桥梁

2.Event Bus

Vue2 可以使用$emit 传递 $on 监听 emit 传递过来的事件,原理其实是运用了JS 设计模式之发布订阅模式,挂载到 Vue config 全局就可以使用啦

type BusClass<T> = {
  emit: (name: T) => void;
  on: (name: T, callback: Function) => void;
};
type BusParams = string | number | symbol;
type List = {
  [key: BusParams]: Array<Function>;
};
class Bus<T extends BusParams> implements BusClass<T> {
  list: List;
  constructor() {
    this.list = {};
  }
  emit(name: T, ...args: Array<any>) {
    let eventName: Array<Function> = this.list[name];
    eventName.forEach((ev) => {
      ev.apply(this, args);
    });
  }
  on(name: T, callback: Function) {
    let fn: Array<Function> = this.list[name] || [];
    fn.push(callback);
    this.list[name] = fn;
  }
}

export default new Bus<number>();

文章作者:   leader755
版权声明:   本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 leader755 !
评论
 上一篇
20.attrs 属性 20.attrs 属性
1.attrs 属性 在 Vue 3 中,<font style="color:rgb(6, 6, 7);">attrs</font> 是一个包含了父作用域中不作为 <font style=
2025-01-30 leader755
下一篇 
AI 工具使用集合 AI 工具使用集合
AI 建站 https://www.cursor.com/ https://codeium.com/windsurf https://bolt.new/ https://v0.dev/ https://www.co.dev/ https:/
2025-01-30 leader755
  目录