Vue中的$Bus使用

将Bus单独抽离成一个文件

Bus.js

import Vue from 'vue';
let Bus = new Vue();
export default Bus;

创建两个兄弟组建

C2.vue

<template>
<view>
<h1>c2</h1>
</view>
</template>
<script>
// 引入Bus
import Bus from '@/util/Bus';
export default {
// 在载入后的生命周期中
mounted () {
// 给bug绑定一个log事件,等待兄弟组件出发
Bus.$on('log', content => {
// 输出兄弟组件传递的内容
console.log(content)
});
}
}
</script>

C1.vue

<template>
<view>
<button @tap="tapBus">c1</button>
</view>
</template>
<script>
import Bus from '@/util/Bus'; export default {
methods:{
tapBus(){
// 点击按钮触发log事件,传递120过去,会输出到控制台
Bus.$emit('log', 120)
}
}
}
</script>

index.vue


<template>
<view class="content">
<!-- 在首页显示这两个组件 -->
<C1></C1>
<C2></C2>
</view>
</template> <script>
// 引入组件
import C1 from '@/components/c1.vue';
import C2 from '@/components/c2.vue';
export default {
// 并注册
components:{
C1,
C2
},
}
</script>

注意:这种引入方式,经过webpack打包后可能会出现Bus局部作用域的情况,即引用的是两个不同的Bus,导致不能正常通信

将Bus注入到Vue的prototype上

main.js

// 将挂载到prototype单独抽离成一个文件
import plugin from './util/Bus';
Vue.use(plugin);

./util/Bus.js

import Bus from 'vue';
let install = function (Vue) {
// 设置eventBus
Vue.prototype.bus = new Bus();
} export default { install };

C2.vue

<template>
<view>
<h1>c2</h1>
</view>
</template>
<script>
export default {
mounted () {
// 注册事件
this.bus.$on('updateData', (content)=>{
console.log(content);
});
},
// 注册的总线事件要在组件销毁时卸载,否则会多次挂载,造成触发一次但多个响应的情况
beforeDestroy () {
this.bus.$off('updateData', (content)=>{
console.log(content);
});
}
}
</script>

C1.vue

<template>
<view>
<button @tap="tapBus">c1</button>
</view>
</template>
<script>
export default {
methods:{
tapBus(){
// 触发兄弟组件身上的事件,并传一个object过去
this.bus.$emit('updateData', {loading: false});
}
}
}
</script>

上述两种方法已在uni-app项目中实践过,参考文章中还有一种挂载在根结点的方法,但并不适配到小程序,所以没有列出来

参考文章:https://www.cnblogs.com/fanlinqiang/p/7756566.html

Vue中的$Bus使用的更多相关文章

  1. vue中eventbus被多次触发(vue中使用eventbus踩过的坑)【bus.$on事件被多次绑定】

    问题描述:只要页面没有强制刷新,存在组件切换,bus.$on方法会被多次绑定,造成事件多次触发   触发bus.$on中绑定的方法.png   bus.$on多次绑定.png 解决办法:在每次调用方法 ...

  2. 总结vue中父向子,子向父以及兄弟之间通信的几种方式

    子向父方式1:通过props,如例子中子组件test1.vue向父组件App.vue传值 App.vue代码 <template> <div id="app"&g ...

  3. vue中兄弟之间组件通信

    我们知道Vue中组件之间的通信有很多方式,父子之间通信比较简单,当我们使用vuex时候,兄弟组件之间的通信也很好得到解决 当我们项目较小时候,不使用vuex时候Vue中兄弟组件之间的通信是怎样进行的呢 ...

  4. 记一笔vue中的中央事件总线的问题,以及解决方案

    代码结构:首先HeaderNav组件是被单独拎出来的,router-view中就对应了内容组件,由于有时候i有的界面的header内容是不一样的,因此要用到兄弟组件的相互通信,这个时候我首先选择了bu ...

  5. Vue状态管理-Bus

    1.父子组件之间进行通讯: 父组件通过属性和子组件通讯,子组件通过事件和父组件通讯.vue2.x只允许单向数据传递. 先定义一个子组件AInput.vue: <template> < ...

  6. vue中eventbus的使用

    eventbus的方法很是简单,我们需要做三步事情: 第一步,我们需要创造一个容器去充当我们的eventbus 第二步,我们需要去抛出,或者说提交我们的事件 第三步,我们去监听我们的那个事件(也许这才 ...

  7. 深度剖析Vue中父给子、子给父、兄弟之间传值!

    本片文章将为您详细讲解在Vue中,父给子传值.子给父传值以及兄弟之间传值方式! 父传子:父组件 // template里面 <aa :info="name"/> // ...

  8. Vue进阶(Bus/作用域slot/动态组件)

    一.Vue非父子组件传值(Bus/总线/发布订阅模式/观察者模式) 我们在之前已经知道了父子传值.父组件传递过来了的值,在子组件通过props接受,然后就可以使用了. 也学过了隔代传值,均是通过pro ...

  9. 关于Vue中页面(父组件)下拉,页面中的子组件加载更多数据的实现方法

    一个项目中存在很多这种情况:父组件(页面)中的子组件需要做下拉加载更多的需求,但是这个下拉到底部的动作只能通过监控页面(父组件)来完成 这就需要父子组件之间的通信,代码如下: 1. 建立一个用于父子组 ...

随机推荐

  1. 修改 Apache 的默认端口

    修改 Apache 的默认端口修改 Apache 端口的方法是最妥协的方法了,后果是当你开启 Apache 服务器的时候,访问的本机地址将会附带端口号,比如 http://localhost:8888 ...

  2. Dynamics CRM CE 怎样从 UCI 改为 classic UI

    dynamics 现在大力推UCI. 但是对于大部分人来说还是使用不习惯. 怎样从UCI改为classic UI呢 1. 快速的方法 https://xxx.crm.dynamics.com/main ...

  3. Shell与进程

    查看当前运行的进程 名称: ps 使用权限: 所有使用者 使用方式: ps [options] [--help] 说明: 显示瞬间行程 (process) 的动态 参数: ps的参数非常多, 在此仅列 ...

  4. 导出表格数据到excel并下载(HSSFWorkbook版)

    这里主要前面是通过一个全局变量,在layui的done回调里拿到数据,然后将该数据导出到excel,这里要注意一点,下载excel不能用ajax方式,如果采用ajax下载默认会读取response返回 ...

  5. ThreadLocalRandom ---- 提升Random在大并发下的效率

    本博客系列是学习并发编程过程中的记录总结.由于文章比较多,写的时间也比较散,所以我整理了个目录贴(传送门),方便查阅. 并发编程系列博客传送门 随机数 随机数在科学研究与工程实际中有着极其重要的应用! ...

  6. mysql基础--查询

    1.mysql查询的五种子句: where子句(条件查询):按照“条件表达式”指定的条件进行查询. group by子句(分组):按照“属性名”指定的字段进行分组.group by子句通常和count ...

  7. 【原创】在 .NET Core 3.1 中使用 Senparc.Weixin.Work 企业微信 SDK —— 发送文本消息

    下面在控制台应用里展示一个简单的例子来实现发送文本消息. 本文目录: 创建控制台应用 添加SDK引用 命令行方式 进入项目目录 添加包引用 配置和使用SDK 添加appsettings.json文件 ...

  8. C语言实现查询whois

    #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> #include <stdl ...

  9. excel 2010 如何设置日期选择器

    excel 中想输入很多的日期.如果每个日期都直接手动输入太过于繁琐,而且容易出错.想制作一个日期选择器,直接鼠标点选就可以了. 效果如下: 具体实现参考 http://wenku.baidu.com ...

  10. Codeforces_797

    学了一学期还是那么菜. 好久没更新,还是得放点东西的. A.贪心最小的素因子,k = 1时,直接输出n就可以了. #include<bits/stdc++.h> using namespa ...