抛开父子组件的通讯,对于非父子组件通信,简单的数据交互,使用Bus是非常不错的。
遇到的坑有两个
1.两个组件的信息交互代码写在哪个生命周期函数中,如果只是点击组件A标签触发函数,然后向界面B传递参数,是传递不到的。
2.小车次数越发越多,即一个信息重复发送了好几次

现在开始实现Bus,最快的方法,第一步,从main.js入手,直接在Vue原型上添加bus方法,简单有效

import Vue from 'vue'
import App from './App'
import router from './router'
//关键代码
Vue.prototype.$bus = new Vue();
//关键代码
new Vue({el: '#app',router,components: { App },template: '<App/>'
})

接下来,直接开始组件通信,现在在StationA发车,带着信息,向公交车站B驶去(记得在router.js界面注册车站A和B)

<template><div><div>這裡是stationA,向stationB发送消息</div><router-link to="/stationB">跳转</router-link>.<!-- 通过router-link跳转到StationB,切换下视角,看看我们的信息是否通过小车到了B站 --></div>
</template>
<script>
export default {name: "StationA",data() {return {};},methods: {},beforeDestroy() {// 在生命beforeDestroy生命周期中通过bus传递参数this.$bus.$emit("bus", "this is A");},mounted() {}
};
</script>

为什么要在生命周期beforeDestroy中传递我们的信息呢?Bus的坑之一就是这里。
因为要想让这个信息传递到B站,B站首先得有信息接收点,在A站beforeDestroy发车的时候,我们要在B站搭建好设备等小车开过来,即写在created里的 this.$bus. $on

  created() {this.$bus.$on("bus", hei => {console.log(hei);this.A_msg = hei;});},

来看StationB的代码

<template><div><div>这里是stationB</div><div>这是接收来的参数{{A_msg}}</div></div>
</template><script>
export default {name: "StationB",data() {return {A_msg: "",};},created() {this.$bus.$on("bus", hei => {//接收小车的带来的信息,顺便打印一下this.A_msg = hei;});console.log(this.A_msg);}
};

最后一个坑,先来看看效果,点击跳转

来到了B站,哦 传达到了,后台也正常打印一次了


点击返回StationA我们再发一次车,跳转到StationB打印记录从1次直接涨到3次?

我们再发一次车试试

这次从3涨到了6,呈现一个规律+1,+2,+3递增的趋势,好像第一次发了一辆车,第二次发了两辆,第三次发了三辆,这么说问题,已经很清晰了。解决方法如下。
在StationA的生命周期created中添加代码

<template><div><div>這裡是stationA,向stationB发送消息</div><router-link to="/stationB">跳转</router-link></div>
</template><script>
// import Bus from "@/components/bus";
export default {name: "StationA",data() {return {};},methods: {},created() {//新增代码看这里this.$bus.$off("bus");//新增代码看这里},beforeDestroy() {// 在生命beforeDestroy生命周期中通过bus传递参数this.$bus.$emit("bus", "this is A");},mounted() {}
};
</script>

这样就可以把之前存在的小车,取消掉,每次都只发一辆小车。

VUE非父子组件通信Bus——公交车踩坑笔记相关推荐

  1. Vue 非父子组件通信方案

    Vue 非父子组件通信方案 概述 在 Vue 中模块间的通信很普遍 如果是单纯的父子组件间传递信息,父组件可以使用 props 将数据向下传递到子组件,而在子组件中可以使用 events (父组件需要 ...

  2. Vue 非父子组件通信 (ref)

    Vue 非父子组件通信 (ref) 流程:1. 先在son子组件中定义一个数据和事件处理程序data( ) { return { flag: false }} , methods: { cry( ) ...

  3. VUE非父子组件通信

    非父子组件通信 vue非父子组件传值方式,本文章整理了两种方式:vuex和总线bus.vuex相比于总线bus来说非常的稳定,推荐直接使用vuex. 我看其他的文章基本上是[点击导航栏回退的时候,去获 ...

  4. Vue 非父子组件通信

    前面的话 在实际业务中,除了父子通信外,还有很多非父子组件通信的场景,非父子组件一般有两种,兄弟组件和跨多级组件.Vue.js 2.x中,使用一个空的Vue实例作为中央事件总线(bus). 中央事件总 ...

  5. Vue非父子组件通信的几种方式

    文章目录 1.provide和inject 1.1基本使用 1.2如何处理响应式数据 2.全局事件总线mitt库 2.1安装mitt库,封装eventbus.js工具类 2.2在其中一个组件中触发事件 ...

  6. [Vue]非父子组件传值(bus/总线/观察者模式/发布订阅模式)

    核心: 在vue原型中挂载vue实例 通过this.bus.$emit('事件名', '参数')向外触发事件和传递参数 在生命周期函数mounted中,通过this.bus.$on('传递出来的事件名 ...

  7. Vue之非父子组件通信

    Vue之非父子组件通信 非父子组件传值方法: 1:在model中新建一个js文件 引入Vue 实例化Vue  最后暴露相关实例 // 引入vue import Vue from 'vue' // 创建 ...

  8. vue父子组件通信以及非父子组件通信的方法

    组件是 vue.js最强大的功能之一,而组件实例的作用域是相互独立的,这就意味着不同组件之间的数据无法相互引用.一般来说,组件可以有以下几种关系,父子关系.兄弟关系和隔代关系,简化点可以分为父子关系和 ...

  9. 子组件调用父组件方法_vue父子组件通信以及非父子组件通信的方法

    组件是 vue.js最强大的功能之一,而组件实例的作用域是相互独立的,这就意味着不同组件之间的数据无法相互引用.一般来说,组件可以有以下几种关系,父子关系.兄弟关系和隔代关系,简化点可以分为父子关系和 ...

最新文章

  1. 用AI变身16岁女孩,抓住40岁违法警察!20岁男大学生钓鱼执法秀翻美国
  2. ant 改变表格数据_学不会这几个操作,面试时千万别说自己精通数据分析
  3. Eclipse开发C/C++之使用技巧小结,写给新手
  4. 如果备份还原SecureCRT、Xshell远程工具远程
  5. 【LeetCode笔记】54. 螺旋矩阵(Java、迭代、递归)
  6. day21—AngularJS学习初体验
  7. 多核编程中伪共享问题(false sharing)
  8. Windows Server 2008 R2正式版尝鲜体验
  9. graphics java_Graphics
  10. Redis主从配置,哨兵,集群的设计原理
  11. (13)Spring框架----Spring与Mybatis的框架整合(XML配置详解)
  12. 决策树- 随机森林/GBDT/XGBoost
  13. Python面向对象编程——类的学习
  14. 如何下载jquery.js文件
  15. UE4 跑酷游戏-得分机制
  16. CC00003.LBCHAC——|LBCHACHPC概述|
  17. [Python图像处理] 二十九.MoviePy视频编辑库实现抖音短视频剪切合并操作
  18. Design with the User in Mind--从用户角度进行设计
  19. 55. Jump Game(跳跃游戏)
  20. Python数据分析(7)----Apple公司股价数据分析

热门文章

  1. [Office] 设置制表符格式
  2. Android修改充电图片,安卓充电提示音修改教程
  3. 常见的SQL跟数据库优化
  4. eclipse 开发常用总结
  5. 《特性:Metrics》直播干货
  6. 字符串查找算法BF、KMP详解
  7. iOS 相机拍照声音消失方法
  8. Python语言-NL-工作日的努力
  9. C# 实现向浏览器的兼容性视图列表中添加、删除网站和检查网站是否在兼容性网站列表中
  10. Meta发言人否认扎克伯格辞职;英国对苹果和谷歌展开反垄断调查;罗永浩官宣细红线科技融资成功 | 每日大事件...