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

news2024/10/7 8:19:54

创建一个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, // 定义一个变量
    }
  },
  // 在销毁前解绑bus
  beforeDestroy() {
    this.lovk = false
    console.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.coloradmin.cn/o/941624.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

项目透明度如何改善团队的工作流程?

无论项目简单还是复杂,项目透明度一直是项目过程中的重要因素。在当今快节奏的商业环境中,对透明度的关注与日俱增,现已成为团队及其项目成功的关键因素。 但创建一个透明的流程对团队管理而言,是一个重大挑战,因团队…

Linux重置ROOT密码(CentOS)

解释说明 在CentOS中重置root密码通常需要进入单用户模式,这是一个没有密码限制的特殊模式,允许您以root权限登录系统并更改密码。 重启系统 如果您无法登录到系统,可以通过重启系统来开始这个过程。您可以使用虚拟机控制台、物理服务器控制台…

探究finally代码块是否执行

情况一:try代码块正常执行,无异常,finally代码块无retrun; 代码演示 public class Test38 {public static void main(String[] args) {int foo foo();System.out.println("foo:" foo);}public static int foo() {tr…

MySQL - 表空间碎片整理方法

MySQL数据库中的表在进行了多次delete、update和insert后,表空间会出现碎片。定期进行表空间整理,消除碎片可以提高访问表空间的性能。 检查表空间碎片 下面这个实验用于验证进行表空间整理后对性能的影响,首先检查这个有100万记录表的大小&…

【操作系统】中断和异常

中断的作用 CPU上会执行两种程序:内核程序和应用程序 在适合的情况下,操作系统内核会把CPU的使用权主动让给应用程序,“中断”是让操作系统内核夺回CPU使用权的唯一途径(用户态转内核态)。 中断技术保证了并发。 中…

用于视频 4K 渲染和编辑的最佳 GPU,适用于高端预算

如果本地渲染和编辑电脑配置不够,如何最节省成本和时间解决: 本地普通电脑连接到赞奇云工作站,秒变超算机,根据需求选择合适的配置,不仅仅能提升渲染速度,还能提升软件的运行速率。 通过云工作站、软件中…

18-使用钩子函数判断用户登录权限-登录前缀

钩子函数的两种应用: (1). 应用在app上 before_first_request before_request after_request teardown_request (2). 应用在蓝图上 before_app_first_request #只会在第一次请求执行,往后就不执行, (待定,此属性没调试通过) before_app_request # 每次请求都会执行一次(重点…

运维Shell脚本小试牛刀(一)

一: Shell中循环剖析....... #!/bin/bash - # # # # FILE: countloop.sh # USAGE: ./countloop.sh # DESCRIPTION: # OPTIONS: ------- # REQUIREMENTS: --------- # # BUGS: ------ # N…

日常生活小技巧 -- 单位换算

开发过程中经常需要需要单位换算的地方。 可以使用工具进行转换: 工具:单位转换 常用单位: 1、角度转换 1弧度(rad) 180/PI 度(deg) 57.29577951308232 度(deg) 1度…

开学有哪些电容笔值得买?性价比高的触控笔推荐

要知道,一款苹果原装电容笔,售价都要接近一千多块钱。事实上,对于那些没有很多预算的人来说,平替电容笔是一个很好的选择。一支苹果的电容笔,比平替电容笔贵了四倍,但比起苹果的原装电容笔,书写…

大模型理解之CLIP

前言 2021年2月份,CLIP模型被提出,想法很简单,性能高效,而且具备很好的泛化性。我在这里简单谈论下我对CLIP模型的理解,以及发现的一些问题。 我是在沐神的视频中了解的CLIP, 里面提到CLIP最大的贡献在于打破了固定类…

【HCIP】17.MPLS VPN

MPLS VPN 不是一个技术,是一堆技术的集合,是一种解决方案 什么是VPN?虚拟专用网络 能够解决公司之间互联的一种技术,在原始的报文上面再重新封装一个或者多个全新的头部,完成在公共网络上的传递 裸纤(每…

【VScode推理模型部署】ONNX runtime

推理模型部署(一):ONNX runtime 实践 VSCode配置之OnnxRuntime(CPU) && YOLOv7验证 简单来说,对于机器学习模型过程可分为训练迭代和部署上线两个方面: 训练迭代,即通过特定的数据集、模型结构、损失函数和评价指标的确…

新生应如何在线确认录取结果和提交入学资料?

马上就要开学啦,学生还没到校的时候,老师如何让学生查询完录取结果,并且向老师确认自己已经查看过呢?最好还能直接提交入学资料,这样就不用开了学现场一个一个写,费时又费力。 老师们可以使用易查分制作一…

为你解决在Mybatis中的疑惑?Mybatis中【关联关系映射】

一.介绍Mybatis中【关联关系映射】 1.什么是Mybatis中【关联关系映射】? 可以实现不同实体之间的关联查询和映射。关联关系映射可以将多个实体对象之间的关联关系通过数据库查询进行映射,实现对象之间的关联操作。 2.常见的Mybatis【关联关系映射】 2.…

(1)进程间常见的几种通信方式

文章目录 进程间的通行方式一、管道模型二、消息队列模型三、共享内存四 信号量机制五、socket 进程间的通行方式 每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内…

Python“牵手”淘宝商品列表数据,关键词搜索淘宝API接口数据,淘宝API接口申请指南

淘宝平台API接口是为开发电商类应用程序而设计的一套完整的、跨浏览器、跨平台的接口规范,淘宝API接口是指通过编程的方式,让开发者能够通过HTTP协议直接访问淘宝平台的数据,包括商品信息、店铺信息、物流信息等,从而实现淘宝平台…

大数据-玩转数据-Flink 水印

一、Flink 中的水印 在Flink的流式操作中, 会涉及不同的时间概念: 1.1 处理时间 是指的执行操作的各个设备的时间,对于运行在处理时间上的流程序, 所有的基于时间的操作(比如时间窗口)都是使用的设备时钟。比如, 一个长度为1个小时的窗口将会包含设备…

去掉vue项目运行时中出现的黄色警告

最近在写vue项目时发现想测试一个接口行不行的时候,在控制台输出的时候发现会有很多黄色警告,每次都要找很久才能找到自己想输出的内容,如下图: 去掉这些只需要一句话: const app createApp(App) app.config.warnHa…

数据库管理-第九十九期 OCM之路(20230828)

数据库管理-第九十九期 OCM之路(20230828) 本周五,我就要在上海Oracle University的考场进行19c OCM的升级考试了。关于之前版本的OCM,11g OCM我是在2016年9月拿下的,在一年后的即2017年的9月拿下了12c OCM。所以对于我…