【vue】event bus简单使用(在js文件与vue文件之间通信)

别再滥用Vuex了!Vue2项目里用Event Bus搞定简单组件通信,附完整封装代码 本文探讨了在Vue2项目中如何用Event Bus替代Vuex实现轻量级组件通信。通过对比分析Event Bus和Vuex的适用场景,展示了Event Bus在简单跨组件通信中的优势,并提供了完整的封装代码和工程化集成方案,帮助开发者避免过度设计,提升项目性能。 阅读详情

bus是vue自身就携带的,不用引入,方便但不适合广泛使用。

前情提要:

vue+ant design vue

ant design vue这个ui框架那是真不好用,我想要做全局的弹窗,需要在http工具js中根据axios的请求情况来控制到App.vue中spin组件。。。

//@/utils/bus.js

import Vue from 'vue'
const bus = new Vue()
export default bus

//这里为什么没选择挂载在this上呢?因为js文件中莫得this呀
//main.js

import bus from '@/utils/bus';

//挂载到this上
Vue.prototype.$bus = bus;
//@/utils/http.js

//引入bus
import bus from '@/utils/bus';

//在axios请求拦截中和相应拦截器中控制App.vue中的Spin的显示与隐藏
axios.interceptors.request.use(
	async config => {
		    axiosTimes++;
            //这里开启Spin蒙层
			bus.$emit('wholeSpin',true);
			let token = await initToken();
			if (token) {
				config.headers.token = token;
			}
			return config;
		},
		async error => {
			message.error('网络不给力,请稍后再试');
			return Promise.reject(error);
		}
);


axios.interceptors.response.use(
	response => {
		axiosTimes--;
        //所有请求返回后,再关闭Spin蒙层,这里通过bus传值给App.vue
		if (axiosTimes == 0) bus.$emit('wholeSpin',false);
		let data = response.data;
		if (data.isSuccess == false) {
			message.warning(response.data.description);
		}
		if (data.code == 10000) {
			console.log(data.code);
			console.log(router.currentRoute.fullPath);
			router.replace('/login');
		}
		return response.data;

	},

	error => {
		let errorMsg = '';
		if (error) {
			console.log(error);
		}
		if (error && error.response) {
			switch (error.response.status) {
				case 400:
					errorMsg = "请求错误(400)";
					break;
				case 401:
					errorMsg = "未授权,请重新登录(401)";
					router.replace({
						path: "/login",
						query: {
							redirect: router.currentRoute.fullPath
						},
					});
					break;
				case 403:
					errorMsg = "无权限,拒绝访问(403)";
					console.log(403);
					break;
				case 404:
					errorMsg = "请求出错(404)";
					console.log(404);
					break;
				case 408:
					errorMsg = "请求超时(408)";
					console.log(408);
					break;
				case 500:
					errorMsg = "服务器错误(500)";
					break;
				case 501:
					errorMsg = "服务未实现(501)";
					console.log(501);
					break;
				case 502:
					errorMsg = "网络错误(502)";
					console.log(502);
					break;
				case 503:
					errorMsg = "服务不可用(503)";
					console.log(503);
					break;
				case 504:
					errorMsg = "网络超时(504)";
					console.log(504);
					break;
				case 505:
					errorMsg = "HTTP版本不受支持(505)";
					console.log(505);
					break;
				default:
					errorMsg = `连接错误(${error.response.status})`;
					console.log("default");
			}
		} else {
			console.log("连接服务器失败!");
			errorMsg = "连接服务器失败!";
            //开启Spin蒙层
			bus.$emit('wholeSpin',true);
		}
		message.error(errorMsg);
		console.log("errorMsg");
		return Promise.reject(error);
	}
);
//App.vue

<template>
	<div id="app">
		<a-spin :spinning="wholeSpin" class="wholeSpin" size="large">
			<div class="spin-content">
				<a-config-provider :locale="locale">
					<router-view />
				</a-config-provider>
			</div>
		</a-spin>
	</div>
</template>

<script>
export default {
    data() {
		return {
			locale: zhCN,
			wholeSpin: false
		};
	},
    created() {
       this.$bus.$on('wholeSpin', msg => {
           //这里获取到http工具js文件中传过来的wholeSpin值
		   this.wholeSpin = msg;
	   });
    }
}
</script>

vue组件暴露和.js文件暴露接口操作 1、将同一类型的组件放在一个文件夹下 2、在此文件夹下创建一个index.js 3、在index.js中导入组件,并把他们暴露出去 1、写法一 import studentCourse1 from './studentCourse.vue' import studentInfo1 from './studentInfo.vue' export var studentCourse=studentCourse1 export var studentInfo=studentInfo1 2、写法二 export var studentCourse=()=>import('./stude 立即下载

相关推荐

CAPL实战:从零构建HEX文件解析器,赋能UDS刷写

本文详细介绍了如何使用CAPL从零构建HEX文件解析器,以支持UDS刷写操作。通过解析HEX文件格式、设计状态机、优化数据结构与算法,实现高效准确的固件数据处理,并提供了与UDS刷写流程对接的工程化实践建议。

weixin_28726391的博客 444

vue里面使用EventBus(事件总线)

轻量级: Mitt只有200字节大小,不会增加你的应用程序的负担方便易用:只需要引入mitt并配置即可使用支持任何Javascript环境:Mitt支持在任何Javascript环境下使用,不仅限于Vue应用场景:组件通信。

qq_44552416的博客 2221

Kerberos基础及KDC服务(理论知识)

kerberos基础理论讲解+KDC服务

Siobhan_Mxin的博客 9715

eventBus,实现不同组件中的方法调用,及JS文件调用Vue组件方法

在uitils文件夹下创建eventBus.js文件,报漏实例。在组件中引入实例,并将该组件中的方法挂载上去。在需要使用挂载方法的组件中引入该实例。

qq_62816576的博客 304

不用写触发器!帆软填报报表自动记录创建/修改时间的终极方案

本文详细介绍了帆软填报报表中无需编写数据库触发器,即可自动记录数据创建时间和修改时间的终极方案。该方案利用帆软内置函数和单元格条件属性,在应用层实现日期自动生成,有效规避了触发器带来的权限、维护和部署难题,为数据填报提供了更轻量、灵活且易于维护的解决方案。

weixin_28040125的博客 365

【软考】系统集成项目管理工程师(一)信息化知识

软考中级——系统集成项目管理工程师备考干货第一章:信息化知识。

商务合作 | 共同学习 | 携手共进 9万+

vue文件之间传参与vue和js之间传参(跨级通信)

常见使用场景可以分为三类:父子通信、兄弟通信、跨级通信

xuelong的博客 3858

博途S7-1500T 使用工艺对象驱动液压轴(含SimaHydTO库)

利用工艺对象控制液压轴位置含PLC控制和仿真程序文档资料下载地址如下:液压比例伺服阀的相关应用知识请参看下面的博客文章:液压位置闭环控制(比例伺服阀应用)_RXXW_Dor的博客-优快云博客。

RXXW_Dor的博客 2900

vue 使用 eventBus

文件 vue-bus.js const install = function (Vue) { const Bus = new Vue({ methods: { emit (event, ...args) { this.$emit(event, ...args); }, ...

A secret makes a woman woman. 573

Oracle EBS Interface/API(29) - AP发票API

续上编文章《Oracle EBS Interface/API(28) - 客制化开发AP付款API》背景,介绍如调用官方提供标准AP发票API调用 用户界面 Invoices(Payables Manager->Invoices->Entry->Invoices) Open Interface Invoices(Payables Manager->Invoices->Entry->Open Interface Invoices) 快速参考 参考点 内容.

陈显平的专栏-Oracle EBS 1151

手把手教你学Simulink——基于经典PID控制的电机系统场景实例:永磁同步电机(PMSM) PID转速控制仿真

*永磁同步电机(PMSM)因其高效、高功率密度和良好的动态响应特性,在现代工业自动化、电动汽车驱动系统等领域得到了广泛应用。为了实现对PMSM的速度精确控制,通常采用矢量控制(Field Oriented Control, FOC)**策略,其中PID控制器是实现速度环和电流环调节的关键组件。本教程将带你使用构建一个基于PID控制的永磁同步电机转速控制系统仿真模型PMSM电机建模矢量控制(FOC)策略实现PID控制器设计系统仿真与调试控制效果分析本文介绍了如何使用构建一个。

MHD0815的博客 6952

Vue2-Vue3组件间通信-EventBus方式-函数封装

Vue3中采用EventBus方式进行组件间通信与Vue2有一定区别1.创建EventBus2.使用EventBus进行通信总的来说,Vue3与Vue2在EventBus方式上的区别不大,只是在创建全局EventBus的方式上有所不同,但是使用起来差异较大,需要根据实际情况进行选择。

JackieDYH的博客 2454

化工设计软件:AVEVA E3D二次开发_(8).管道系统设计

在 AVEVA E3D Design 中,管道规格的定义是确保设计一致性和标准化的关键。通过二次开发,可以自动生成并管理管道规格。下面是一个示例,展示如何通过编写脚本来定义和管理管道规格。# 导入必要的库 import clr。

kkchenjj的博客 978

vue 点击一个按钮触发两个事件_vue 组件之间事件触发($emit)与event Bus($on)的用法说明...

组件之间事件触发之前使用组件,并不是很频繁,是水平的问题,目前工作中,公司大佬带着我手写过一个组件,再此很感谢他的指导。目前简单的组件已经有了自己的逻辑思维,正在从低级码农向中级码农蜕变。废话不多说。上图看看组件情况。新增按钮组件:操作按钮组合组件:此时有个需求就是,无论是哪个按钮,如果改变了列表中的数据,列表需要实时更新数据。此时就需要用到组件间的事件触发。父子组件之间事件触发可以使用$emit...

weixin_35836574的博客 4252

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Vue兄弟组件传值 ------ bus 中央事件总线

之前了解到了父组件传值给子组件(props),子组件传值给父组件($emit),对于兄弟组件间传值是通过他们的父组件作为介质传送的,相当麻烦,现在用bus(一个空的vue对象)作为介质传值更加方便。 第一步:在assert文件夹下创建一个eventBus.js文件 第二步:在components文件夹下创建一个文件,用来传递数据(触发自定义函数) 第三步:在components文件夹下创建一个文件,用来接收数据(监听自定义函数) 第四步:在App.vue里使用这两个组件...

江湖行骗老中医 479

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

vue $emit $on 之兄弟间通信

Event.$emit('eventName',this.msg);    发送数据,第一个参数是事件名,第二个参数是传出的数据 Event.$on('eventName',function(msg){})  接收数据,第一个参数是事件名,要个$emit的第一个参数保持一致,第二个是传入的数据,在方法里可以将传入的数据进行操作 首先要创建一个.js文件创建一个vue实例,例如:bus.js import Vue from 'vue' export var bus = new Vu...

前端小知识 730

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

vue 同级页面调用方法_Vue.js如何在一个页面调用另一个同级页面的方法

使用场景:页面分为header、home、footer三部分,需要在home中调用header中的方法,这两个没有相互引入官方给出方法:需要在展示页里调用顶部导航栏页里的方法,两者之间没有引用关系,看了一下vue的API发现可以用这个方法实现。在项目中实现:1.首先同一个vue实例来调用两个方法。所以可以建立一个中转站。建立 util.js 中转站文件(任意位置,我是在/assets/js/uti...

weixin_42237487的博客 838

全局事件总线(GlobalEventBus)

是什么? 是一种组件间通信的方式,适用于任意组件间通信 怎么安装全局总线? 一开始在main.js里面,但后来使用beforeCreate(){}钩子,在这个钩子中,是在数据监测,数据代理之前创建,此时无法通过Vue实例访问到data中的数据,methods中的方法,模板还没解析。 Vue.prototype.$bus=this,将Vue的原型对象的属性$bus指向当前的Vue实例对象,因为Vue的原型对象的属性的方法都可以被Vue实例对象和VueComponent组件实例对象访...

qq_45679015的博客 5497

Vue3 中使用 Event Bus 的完整指南(2025年最新版)

Vue3 中使用 Event Bus 的完整指南(2025年最新版)摘要 Vue3 不再内置 Event Bus,但可通过第三方库(如 mitt)或手动实现的方式继续使用。本文详细介绍了两种实现方案:1)使用 mitt 库创建轻量级事件总线,包含安装、创建实例、发送/监听事件的方法;2)手动实现 Event Bus 类。Event Bus 适用于非父子组件通信、全局事件广播等场景,但存在类型不安全、维护困难等缺点。文章还对比了 Vue3 官方推荐的替代方案:Pinia 状态管理、Provide/Inject

2810

前端通信事件:深入理解 Event Bus 与浏览器通信 API

Event Bus是一种基于发布-订阅模式的通信机制,常用于模块之间的解耦。它是 Node.js 各模块的基石,同时也是前端组件通信的重要手段之一。:通过实现页面与 Service Worker 之间的通信。适合离线缓存和后台任务场景。' });});:允许多个页面共享一个 Worker 实例,用于跨页面通信。' });WebSocket:用于实时通信,适合需要服务器参与的场景。' }));IndexedDB:虽然主要用于存储,但也可以通过轮询或监听变化实现通信。' });

写完这行代码打球去的博客 985

Vue3 使用 Event Bus

本文已整理到 Github,地址 ???? blog。 如果我的内容帮助到了您,欢迎点个 Star ???????????? 鼓励鼓励 :) ~~ 我希望我的内容可以帮助你。现在我专注于前端领域,但我也将分享我在有限的时间内看到和感受到的东西。 在 Vue2 中,创建 Event Bus 如下: export const bus = new Vue() bus.$on(...) bus.$emit(...) 在 Vue...

lio-zero 的博客 3618

Vue组件通信中event-bus的使用

1.最近再写一个后台管理项目,本着能白嫖就不动手的目的,就去GitHub上面整了个项目模版。由于刚入行不久,决定先研究人家代码,方便自己后续添加功能啥的,于是就发现了eventBus这个东西。 2.eventBus又叫事件总线,可以看作是用来传递数据的桥梁,在一些比较小的项目中就可以使用它来替代vuex。 3.使用方法 1.创建一个bus.js的文件夹,里面代码如下 import Vue 'vue' export defulat new Vue() 2.在传递组件中引入bus.js文件并在相应的位置传递变

weixin_45932733的博客 841

vue非父子传值 创建公共文件bus.js

<template> <div> <h1>app</h1> <one></one> <two></two> </div> </template> <script> import one from "./one.vue" ...

酷酷的旭 3983

vue 组件之间事件触发($emit)与event Bus($on)的使用

组件之间事件触发 之前使用组件,并不是很频繁,是水平的问题,目前工作中,公司大佬带着我手写过一个组件,再此很感谢他的指导。目前简单的组件已经有了自己的逻辑思维,正在从低级码农向中级码农蜕变。废话不多说。上图看看组件情况。 新增按钮组件: 操作按钮组合组件: 此时有个需求就是,无论是哪个按钮,如果改变了列表中的数据,列表需要实时更新数据。 此时就需要用到组件间的事件触发。 父子组件之间事件触发可以使用$emit $emit的使用方法如下: 在子组件中,写一个click点击事件。比如: cancelCU(

yehaocheng520的博客 6560

Vue2 封装全局事件总线(Event Bus) 实现跨组件通信

本文介绍了在Vue2项目中封装全局EventBus的方法。通过创建独立的EventBus.js文件,封装了事件触发(emitEvent)、监听(listenEvent)和移除(removeEvent)的方法,并支持错误捕获。在main.js中挂载到Vue原型,使组件可通过this.$eventBus访问。文章提供了发送和接收事件的组件示例代码,并强调了事件命名规范、内存泄漏防范等注意事项。这种封装方式实现了高可维护性的全局事件通信,适合简单通知场景,复杂场景建议使用Vuex/Pinia。

小白记录生活的博客 717

Event Bus:Vue组件间的‘广播电台‘,轻松实现跨组件通信!

今天咱们来聊聊Vue项目中一个简单实用的跨组件通信方案——Event Bus(事件总线)。它就像个广播电台,让任意组件之间都能轻松"喊话",特别适合那些没有直接父子关系的组件通信。

欢迎来到我的前端博客!这里汇集了关于前端开发的最新技术、实用工具和经验分享。我将为你提供详细的教程、代码示例和实战案例,帮助你掌握Web开发的核心概念和技能。不论你是初学者还是有经验的开发者,这个博客都适合你。 886
上一篇: 【vue】elementui Form和rules注意事项及规则
下一篇: vscode常用插件(个人)
谭CV
博客等级 码龄9年 73粉丝 85原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值