首页 > 其他分享 >Vue事件总线

Vue事件总线

时间:2023-06-26 10:45:45浏览次数:38  
标签:Vue 自定义 总线 updateData 事件 组件 data

下面是一个使用 Vue 事件总线实现两个组件间通信的完整例子:
假设我们有两个组件 A 和 B,需要在它们之间进行通信。具体来说,当组件 A 中的按钮被点击时,需要向组件 B 发送一个事件,使得组件 B 中的数据被更新。

创建 EventBus

首先,在 Vue 应用中创建一个 EventBus,通常可以在 main.js 中创建并将其挂载到 Vue.prototype 上,使得它可以在所有组件中使用:

import Vue from 'vue'; 
const EventBus = new Vue(); 
Vue.prototype.$eventBus = EventBus;

组件 A 中发送事件

在组件 A 中,可以通过 this.\(eventBus.\)emit(eventName, args) 方法来发送事件。假设我们需要在组件 A 中监听按钮的点击事件,并在事件中发送一个名为 'updateData' 的自定义事件,可以按照以下方式实现:

<template>
  <div>     
    <button @click="sendUpdateEvent">更新数据</button>   
  </div> 
</template> 

<script> 
  export default {   
    methods: {     
      sendUpdateEvent() {       
        // 发送名为 'updateData' 的自定义事件       
        this.$eventBus.$emit('updateData', { newData: 'some data' });
      },   
    }
  }; 
</script>

在这个例子中,我们在按钮的点击事件中调用了 sendUpdateEvent 方法,并在方法中通过 this.\(eventBus.\)emit 方法发送了一个名为 'updateData' 的自定义事件,并传递了一个包含数据的对象 { newData: 'some data' }。

组件 B 中监听事件

在组件 B 中,可以通过 this.\(eventBus.\)on(eventName, callback) 方法来监听事件。假设我们需要在组件 B 中监听名为 'updateData' 的自定义事件,并在事件中更新组件 B 中的数据,可以按照以下方式实现:

<template>
    <div>
        <p>{{ data }}</p>
    </div>
</template>
  
<script>
export default {
    data() {
        return {
            data: 'initial data',
        };
    },
    created() {
        // 监听名为 'updateData' 的自定义事件
        this.$eventBus.$on('updateData', ({ newData }) => {
            // 更新数据
            this.data = newData;
        });
    },
};
</script>

在这个例子中,我们在组件 B 中通过 this.\(eventBus.\)on 方法监听了名为 'updateData' 的自定义事件,并在回调函数中更新了组件 B 中的数据。
这样,在组件 A 中点击按钮时,就会触发自定义事件并更新组件 B 中的数据。通过这种方式,我们就实现了两个组件间的通信。

标签:Vue,自定义,总线,updateData,事件,组件,data
From: https://www.cnblogs.com/marshban/p/17504875.html

相关文章

  • vue根据element-ui实现下拉多选
    下拉多选element-ui实现效果组件代码<template><el-selectclass="maxwidth"v-model="showVal"multipleplaceholder="请选择":popper-append-to-body="false"@remove-tag="removetag"@......
  • 前端Vue自定义精美tabs,可设置下划线图标 热门标题
    前端Vue自定义精美tabs,可设置下划线图标热门标题,下载完整代码请访问uni-app插件市场地址:https://ext.dcloud.net.cn/plugin?id=13186效果图如下:cc-beautyTabs使用方法<!--tabchange:tab选择事件tabList:tab数据--><cc-beautyTabs@tabChange="tabChange":tabList="t......
  • 前端Vue自定义滚动卡片,可以用于商品海报生成
    前端Vue自定义滚动卡片,可以用于商品海报生成,下载完整代码请访问uni-app插件市场地址:https://ext.dcloud.net.cn/plugin?id=13189实现代码如下:cc-scroolCard使用方法<!--dataInfo:滚动卡片数据 swiperIndex:滚动序列@change:滚动事件--><cc-scroolCard:dataInfo="data":......
  • springboot+vue基于Web的社区医院管理服务系统,附源码+数据库+论文+PPT,适合课程设计、
    1、项目介绍在Internet高速发展的今天,我们生活的各个领域都涉及到计算机的应用,其中包括社区医院管理服务系统的网络应用,在外国线上管理系统已经是很普遍的方式,不过国内的管理系统可能还处于起步阶段。社区医院管理服务系统具有社区医院信息管理功能的选择。社区医院管理服务系统......
  • SpringBoot + Ant Design Vue实现数据导出功能
    (SpringBoot+AntDesignVue实现数据导出功能)一、需求以xlsx格式导出所选表格中的内容要求进行分级设置表头颜色。二、前端代码实现2.1显示实现首先我们需要添加一个用于到导出的按钮上去,像这样的:<a-button@click="exportBatchlistVerify">批量导出</a-button>至......
  • 记一次异常外联事件应急响应
    01事件背景介绍某内部应急演练中,安全部门收到来自业务部门的告警,称应用服务器存在异常外联情况,现需根据流量情况进行安全事件分析。02事件分析过程根据应用服务器80.X.X.15网络连接情况排查,存在异常外联IP124.223.206.156行为。以应用服务器80.X.X.15为目的地址,寻找入侵主机。可......
  • 记一次曲折的fastjson事件应急响应
    01事件背景介绍某内部应急演练中,安全部门收到通知,称公司内部资产被入侵,且可能已经开始内网横向入侵,现需根据流量情况进行安全事件分析。02事件分析过程通过数据包发现10.X.X.2对80.X.X.1/24使用扫描器发起扫描,包括80.X.X.12,80.X.X.48,80.X.X.61查看源IP80.X.X.12外连情况发现无......
  • vue 解决 post请求下载文件,下载的文件损坏打不开,结果乱码
    axios.post('xxx',{responseType:'blob'//指定返回数据的格式为blob}).then(response=>{console.log(response);//把response打出来,看下图leturl=window.URL.createObjectURL(response.data);console.log(url)vara=document.cre......
  • panel绑定主体错误导致事件无法触发问题记录(尺寸异常)
    代码实例#coding:utf-8#!/usr/bin/envpython#@author:9527importwxclassDelayStatisticalPanel(wx.Panel):'''@function:背景板(BOOK)@By:9527'''def__init__(self,parent):super().__init__(paren......
  • Vuex教程
    Vuex使用场景:全局管理数据注意:vue2项目要安装vuex3版本,vue3项目要安装vuex4版本安装npminstallvuex@3--save建立以下目录结构/src /store -store.js创建vuexstorevuex中最关键的是store对象,这是vuex的核心。可以说,vuex这个插件其实就是一个store对象,每个vue......