vue中bus的使用和涉及到的问题

news/2024/10/20 11:29:11/

创建一个js文件

import Vue from "Vue"
export default new Vue

我们可以直接在要使用的页面中引用使用

import bus from '@/assets/js/eventBus.js';bus.$emit("info", "123") // 使用bus.$on("info", (val) => { // 接收console.log("info val", val);
})

也可以     main.js中引用定义:

import Bus from '@/assets/js/eventBus.js';  
Vue.prototype.$bus = Bus;  //注意这里的Vue是我上面引入的vue   import Vue from 'vue'this.$bus.$emit("vaPage",value); //很像父子之间传值的方法this.$bus.$on("vaPage", v =>{   //vaPage传的时候的key是什么接收就必须是什么console.log(v);   //v是传来的值,可以接收多个参数
})

正常的通讯上面就已经完成了,但是还有一个问题那就是如果接受的页面不存在了,还是会继续执行bus.$on,所以我们需要再不需要的时候或者页面销毁时将bus销毁

  beforDestroy(){this.$bus.$off("vaPage");  //当这个组件销毁的时候bus也跟着一起销毁bus.$off("info") // 或者}

但是如果是有个页面通讯多个页面通用一个方法我们又该怎么办呢?比如一个tab切换,里面分别是不同的内容,但是点击了之后有一个详情需要联动,如下图:

不可能点击一个定义一个方法,详情接受所有方法, 只能是都是用一个方法然后通过传递特定的标识来进行处理!

那么当有显示隐藏功能时就会发现,页面没有了正常来说不应该再走该页面接收的方法了,但是现实情况是一直在调用,所以使用bus.$off("info")销毁方法是不对的,bus是一个全局的,如果销毁了会导致页面的其他功能不可用。所以想了一个折中的方法暂时解决该问题

  data() {return {lovk: true, // 定义一个变量}},// 在销毁前解绑busbeforeDestroy() {this.lovk = falseconsole.log("beforeDestroy", this.lovk)},mounted() { bus.$on("info", (val) => {if (this.lovk) { // 如果this.lovk为true,说明该页面存在需要执行里面的方法,否则就不执行console.log("info val", val);}})  },
// 那么有人会说为什么不直接将整个bus.$on()包裹进去呢?如下列:mounted() { if (this.lovk) { // 这样写都不会触发了不是更好吗?bus.$on("info", (val) => { console.log("info val", val);})  }},
// 其实是不可行的,实验一下你会发现,当你页面消失在显示后bus.$on()方法不执行了

bus还有很多很多坑需要我们去注意,所以谨慎使用bus,暂时就介绍这么多!


http://www.ppmy.cn/news/1069302.html

相关文章

四层负载均衡的NAT模型与DR模型推导 | 京东物流技术团队

导读 本文首先讲述四层负载均衡技术的特点,然后通过提问的方式推导出四层负载均衡器的NAT模型和DR模型的工作原理。通过本文可以了解到四层负载均衡的技术特点、NAT模型和DR模型的工作原理、以及NAT模型和DR模型的优缺点。读者可以重点关注NAT模型到DR模型演进的原…

Android屏幕适配(5) — 最小宽度smallWidth适配

概述 最小宽度smallWidth适配实现屏幕适配方案 详细 前言 在之前的文章中,我们讲到了Android屏幕适配的一些知识,大家感兴趣的话可参考Android屏幕适配(1) — 概念解释Android屏幕适配(2) — drawable与mipmapAndroid屏幕适配(3) — 资源文件夹命名与…

2023Java ——八股文(面试题冲击小测 15w)

这里写目录标题 Java基础篇语法篇JDK、JRE和JVM的关系栈和堆分别存的什么数据异步和同步线程和进程区别java的数据类型有哪些equals和HashCode重写的问题?深拷贝和浅拷贝的区别和equals的区别常见的运行时异常有哪些? 集合集合的形式List和Set的区别ArrayList和Lin…

手机无人直播软件有哪些,又有哪些优势?

如今,随着智能手机的普及和移动互联网的发展,手机无人直播成为了一个炙手可热的领域。手机无人直播软件为用户提供了便捷、灵活的直播方式,让更多商家人能够实现自己的直播带货的梦想。接下来,我们将探讨手机无人直播软件有哪些&a…

BERT 上的动态量化

(实验)BERT 上的动态量化 介绍 在本教程中,我们将动态量化应用在 BERT 模型上,紧跟 HuggingFace Transformers 示例中的 BERT 模型。 通过这一循序渐进的过程,我们将演示如何将 BERT 等众所周知的最新模型转换为动态量化模型。 …

PAT 1136 A Delayed Palindrome

个人学习记录,代码难免不尽人意 A B C where A is the original number, B is the reversed A, and C is their sum. A starts being the input number, and this process ends until C becomes a palindromic number – in this case we print in the last line …

c++多线程中常用的使用方法

1)promise(保证)和future的联合使用&#xff0c;实现两个线程的数据传递 #include <iostream> #include<thread> #include<future>using namespace std;//promise用法&#xff1a;可以给线程一个值&#xff0c;而从另一个线程读出该值 // 实现了两个线程的数…

Linux操作系统--shell编程(read读取控制台输入)

1.基本语法 read (选项) (参数) 选项: -p:指定读取值时的提示符; -t:指定读取值时等待的时间(秒)如果-t 不加表示一直等待 参数: 变量:指定读取值的变量名