当前位置: 首页 > article >正文

vue.js 非父子通信-事件总线

Vue.js 中,非父子组件之间的通信可以使用事件总线来实现。事件总线是一个中央化的事件管理器,可以让任意组件之间进行通信。

实现事件总线的步骤如下:

  1. 创建一个新的 Vue 实例作为事件总线:
// EventBus.js
import Vue from 'vue';
export const EventBus = new Vue();

  1. 在需要通信的组件中,通过 EventBus 发送事件:
// ComponentA.vue
import { EventBus } from './EventBus.js';
export default {
  methods: {
    sendMessage() {
      EventBus.$emit('message', 'Hello from ComponentA');
    }
  }
}

  1. 在接收事件的组件中,通过 EventBus 监听事件:
// ComponentB.vue
import { EventBus } from './EventBus.js';
export default {
  mounted() {
    EventBus.$on('message', (data) => {
      console.log(data); // 输出:Hello from ComponentA
    });
  }
}

这样,ComponentA 组件通过 EventBus 发送了一个名为 message 的事件,并传递了数据 'Hello from ComponentA'ComponentB 组件通过 EventBus 监听了 message 事件,并在回调函数中打印收到的数据。

代码示例:

<template>
  <div>
    <button @click="sendMessage">Send Message</button>
  </div>
</template>

<script>
import { EventBus } from './EventBus.js';

export default {
  methods: {
    sendMessage() {
      EventBus.$emit('message', 'Hello from ComponentA');
    }
  }
}
</script>

<template>
  <div>
    <p>{{ message }}</p>
  </div>
</template>

<script>
import { EventBus } from './EventBus.js';

export default {
  data() {
    return {
      message: ''
    }
  },
  mounted() {
    EventBus.$on('message', (data) => {
      this.message = data;
    });
  }
}
</script>

在这个示例中,当点击 "Send Message" 按钮时,ComponentA 组件通过 EventBus 发送了一个名为 message 的事件,并传递了数据 'Hello from ComponentA'ComponentB 组件通过 EventBus 监听了 message 事件,并将收到的数据赋值给 message 属性,然后在页面上显示出来。

使用事件总线可以让非父子组件之间进行灵活的通信,但也可能导致组件之间的关系变得复杂,难以追踪和维护。因此,在使用事件总线时,需要注意合理使用,避免滥用。


http://www.kler.cn/a/464710.html

相关文章:

  • Elasticsearch:Lucene 2024 年回顾
  • 【工具整理】WIN换MAC机器使用工具整理
  • 家教老师预约平台小程序系统开发方案
  • Leetcode打卡:我的日程安排表III
  • BGP基础配置实验
  • 什么是.net framework,什么是.net core,什么是.net5~8,版本对应关系
  • 动态规划解决不同的二叉搜索树问题
  • 游戏社交趋势下,游戏语音再升级!
  • Springboot的自动配置原理?
  • LeetCode题解:2625. 扁平化嵌套数组,递归
  • 解决chatgpt(mac app登陆)出现报错:获取您的 SSO 信息时出错
  • 如何利用动态IP采集数据?
  • 方正畅享全媒体新闻采编系统imageProxy存在任意文件读取漏洞
  • Java毕设项目:基于Springboot电影院在线选座订票系统设计与实现开题报告
  • 可扩展性设计架构模式——事件驱动架构
  • 前端页面有那三层?分别是什么?作用是 什么?
  • 计算机网络期末复习之网络层
  • 代码随想录算法【Day8】
  • CentOS7 解决ping:www.baidu.com 未知的名称或服务
  • el-table行列转换简单版,仅限单行数据
  • 在K8S中,如何部署kubesphere?
  • 【Ubuntu 系统 之 开启远程桌面SSH登录】
  • 课设CLion连接Ubuntu14makeQt项目出错解决汇总
  • 将simpletex 识别的公式 复制到ppt 中
  • java Redisson 实现限流每秒/分钟/小时限制N个
  • 启智云脑Ascend调试平台安装gcc