Vue中的$Bus使用
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使用的更多相关文章
- vue中eventbus被多次触发(vue中使用eventbus踩过的坑)【bus.$on事件被多次绑定】
问题描述:只要页面没有强制刷新,存在组件切换,bus.$on方法会被多次绑定,造成事件多次触发 触发bus.$on中绑定的方法.png bus.$on多次绑定.png 解决办法:在每次调用方法 ...
- 总结vue中父向子,子向父以及兄弟之间通信的几种方式
子向父方式1:通过props,如例子中子组件test1.vue向父组件App.vue传值 App.vue代码 <template> <div id="app"&g ...
- vue中兄弟之间组件通信
我们知道Vue中组件之间的通信有很多方式,父子之间通信比较简单,当我们使用vuex时候,兄弟组件之间的通信也很好得到解决 当我们项目较小时候,不使用vuex时候Vue中兄弟组件之间的通信是怎样进行的呢 ...
- 记一笔vue中的中央事件总线的问题,以及解决方案
代码结构:首先HeaderNav组件是被单独拎出来的,router-view中就对应了内容组件,由于有时候i有的界面的header内容是不一样的,因此要用到兄弟组件的相互通信,这个时候我首先选择了bu ...
- Vue状态管理-Bus
1.父子组件之间进行通讯: 父组件通过属性和子组件通讯,子组件通过事件和父组件通讯.vue2.x只允许单向数据传递. 先定义一个子组件AInput.vue: <template> < ...
- vue中eventbus的使用
eventbus的方法很是简单,我们需要做三步事情: 第一步,我们需要创造一个容器去充当我们的eventbus 第二步,我们需要去抛出,或者说提交我们的事件 第三步,我们去监听我们的那个事件(也许这才 ...
- 深度剖析Vue中父给子、子给父、兄弟之间传值!
本片文章将为您详细讲解在Vue中,父给子传值.子给父传值以及兄弟之间传值方式! 父传子:父组件 // template里面 <aa :info="name"/> // ...
- Vue进阶(Bus/作用域slot/动态组件)
一.Vue非父子组件传值(Bus/总线/发布订阅模式/观察者模式) 我们在之前已经知道了父子传值.父组件传递过来了的值,在子组件通过props接受,然后就可以使用了. 也学过了隔代传值,均是通过pro ...
- 关于Vue中页面(父组件)下拉,页面中的子组件加载更多数据的实现方法
一个项目中存在很多这种情况:父组件(页面)中的子组件需要做下拉加载更多的需求,但是这个下拉到底部的动作只能通过监控页面(父组件)来完成 这就需要父子组件之间的通信,代码如下: 1. 建立一个用于父子组 ...
随机推荐
- AVR单片机教程——UART进阶
本文隶属于AVR单片机教程系列. 在第一期中,我们已经开始使用UART来实现单片机开发板与计算机之间的通信,但只是简单地讲了讲一些概念和库函数的使用.在这一篇教程中,我们将从硬件与软件等各方面更深 ...
- prometheus和zabbix的对比
前言: 新公司要上监控,面试提到了Prometheus 是公司需要的监控解决方案,作为喜新厌旧的程序员,我当然是选择跟风了,之前主要做的是zabbix,既然公司需要prometheus,那没办法,只能 ...
- WinSCP整合SecureCRT打开终端
使用WinSCP直接操作文件非常方便,但是如果用它来连入SSH进行指令交互就不方便了,使用XShell.SecureCRT.Putty等SSH终端软件敲指令却很不错,于是想能不能将两者结合起来使用.我 ...
- Django自定义认证系统
官网教程:https://docs.djangoproject.com/en/2.2/topics/auth/customizing/ app下的model.py from django.db imp ...
- iOS--->运行程序屏幕上下有黑边
iOS--->运行程序屏幕上下有黑边 原因是LaunchImage没有设置好,图片等尺寸没有和对应的手机屏幕大小适配导致. 解决方法 就是要增加启动图片,把屏幕拉伸,匹配好每个机型的屏幕大小,这 ...
- Oracle 数据库 回滚
1.打开Flash存储的权限ALTER TABLE authorization ENABLE row movement ;2.把表还原到指定时间点flashback table authorizati ...
- C++快读模板
C++的快速读入模板 inline int read() { ; char ch = getchar(); ') { if (ch == '-') flag = true; ch = getchar( ...
- Docker深入浅出系列 | 单节点多容器网络通信
目录 教程目标 准备工作 带着问题开车 同一主机两个容器如何相互通信? 怎么从服务器外访问容器 Docker的三种网络模式是什么 Docker网络通信原理 计算机网络模型回顾 Linux中的网卡 查看 ...
- 实验5: IOS的升级与恢复
实验5: IOS的升级与恢复 实验目的 通过本实验可以掌握 1) 掌握IOS 正常的情况下升级IOS2) IOS 丢失的情况下使用TFTP恢复IOS3) IOS 丢失的情况下使用X ...
- Visual Studio 常见问题
VS 2013相关问题 VS 2013 Ultimate Update 5 下载地址: 英文版: vs2013.5_ult_enu.iso SHA-1:918EA4A911858D32C9771480 ...