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

这篇具有很好参考价值的文章主要介绍了vue中bus的使用和涉及到的问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

创建一个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切换,里面分别是不同的内容,但是点击了之后有一个详情需要联动,如下图:
vue中bus的使用和涉及到的问题,vue.js,javascript,前端

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

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

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

最新的一种解决办法是组件中使用哪里使用来传入一个名字,然后每个地方的名字都不一样但是用的都是一个方法,这样就该注销的注销也不影响其他地方了

 bus.$on(name, (val) => { // 相当于将原先的info方法名变成了一个变量的形式
        console.log("info val", val);
    })  

bus还有很多很多坑需要我们去注意,所以谨慎使用bus,暂时就介绍这么多!文章来源地址https://www.toymoban.com/news/detail-680121.html

到了这里,关于vue中bus的使用和涉及到的问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 网络安全涉及到的知识积累(5)

    1.bp里的raw、params、headers、hex几个格式分别表示什么? Raw:web请求的raw格式,包含请求地址、http协议版本、主机头、浏 览器信息、Accept可接受的内容类型、字符集、编码方式、cookie等。我们可以手工去修改这些信息,对服务器端进行渗透测试。 params:客户端请求的参数信息

    2024年02月11日
    浏览(24)
  • JavaScript 发布-订阅设计模式实现 React EventBus(相当于vue的$Bus)非父子之间通信

    参考文档:https://github1s.com/browserify/events/blob/main/events.js                  https://www.npmjs.com/package/events                  https://github.com/browserify/events                     首先先新建一个文件eventBus.tsx 然后再组件A使用=接收 然后再组件B使用=触发     安装这个events插件

    2023年04月18日
    浏览(34)
  • java基础中键盘录入涉及到的方法

    总的方法有以下几种: next()、nextLine()、nextInt()、nextDouble() 其中,next()、nextLine()在键盘录入时可以接收任意数据,但是都会返回的内容都是字符串形式; 比如:键盘录入abc,那么会把abc看做字符串返回。键盘录入123,那么会把123看做字符串返回。  代码示

    2024年02月07日
    浏览(28)
  • 【前端灵魂脚本语言JavaScript⑤】——JS中数组的使用

    🐚 作者: 阿伟 💂 个人主页: Flyme awei 🐋 希望大家多多支持😘一起进步呀! 💬 文章对你有帮助👉关注✨点赞👍收藏📂 第一种: var 数组名 = new Array(); 创建一个空数组 第二种: var arr2 = new Array(10); 创建一个定长为10的数组 第三种 var arr3 = new Array(a,b,c); 创建时直接指定元素值

    2023年04月08日
    浏览(38)
  • 线性代数中涉及到的matlab命令-第一章:行列式

    目录 1,逆序数  2,行列式定义和性质 2.1,常用特性及命令  2.2,求行列式 2.3,行列式的性质  2,行列式按行(列)展开  3,范德蒙德行列式   在学习线性代数过程中,发现同步使用MATLAB进行计算验证可以加深对概念的理解,并能掌握MATLAB的命令和使用方法; 使用的线性

    2024年02月04日
    浏览(27)
  • http和https的区别,以及https涉及到的加密过程

    一.http与https的介绍 http:超文本传输协议,是互联网应用最广泛的一种网络协议。设计的最初目的是为了提供一种发布和接收HTML页面的方法。是以明文的形式来传输的,所以就会存在一定的安全隐患(因为攻击者可以截取web服务器和网站相关的报文,就可以直接读懂其中的信

    2024年02月05日
    浏览(32)
  • 线性代数中涉及到的matlab命令-第二章:矩阵及其运算

    目录 1,矩阵定义 2,矩阵的运算 3,方阵的行列式和伴随矩阵  4,矩阵的逆  5,克莱默法则  6,矩阵分块  矩阵与行列式的区别: (1)形式上行列式是数表加两个竖线,矩阵是数表加大括号或中括号; (2)行列式可计算得到一个值,矩阵不能; (3)两个行列式相加与两

    2024年02月08日
    浏览(35)
  • 回声消除(AEC)原理、算法及实战——完整的回声消除算法框架所涉及到的模块介绍

    一、一个完整的回声消除系统,包含以下几个模块: 1.时延估计(Time Delay Estimation, TDE) 模块 2.(线性)回声消除(Linear Acoustic Echo Cancellation, AEC) 模块(线性滤波模块) 3.双讲检测(Double-Talk Detect, DTD) 模块 4.非线性残余声学回声抑制(Residual Acoustic Echo Suppression, RAES) 模块(

    2024年02月04日
    浏览(23)
  • 线性代数中涉及到的matlab命令-第三章:矩阵的初等变换及线性方程组

    目录 1,矩阵的初等变换 1.1,初等变换 1.2,增广矩阵  ​1.3,定义和性质 1.4,行阶梯型矩阵、行最简型矩阵 1.5,标准形矩阵  1.6,矩阵初等变换的性质  2,矩阵的秩  3,线性方程组的解  初等变换包括三种:交换行或列、某行或列乘以一个非零系数、某行或列加上零一行

    2024年02月04日
    浏览(39)
  • 在前端开发中,何时应该使用 jQuery,何时应该使用 Vue.js

    如果您是最近才开始进入 Web 前端开发领域的开发人员,那么您可能会听说过 jQuery。jQuery 是一个小巧而功能强大的 JavaScript 库,旨在简化跨浏览器 DOM 操作、事件处理、动画效果和 AJAX 等方面的操作,可以让开发人员更轻松地开发出高质量的网站和 Web 应用程序。 何时应该使

    2024年02月02日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包