Vue 非父子组件通信方案
Vue 非父子组件通信方案
概述
在 Vue 中模块间的通信很普遍
如果是单纯的父子组件间传递信息,父组件可以使用 props 将数据向下传递到子组件,而在子组件中可以使用 events (父组件需要先监听对应子组件触发的事件) 向父组件传递信息。
但是当我们需要进行非父子组件间的通信或者是父子组件间的通信需要层层传递过于复杂时就需要使用非父子组件通信方案来进行组件间信息的传递:
下面是常见的两种非父子组件通信方案:
- 使用一个空的 Vue 实例作为一个事件总线中心 Bus
- 使用专门的状态管理模式 vueX
一、事件总线中心 Bus
总线中心 Bus 的实现思想是先把自己在 main.js 里进行全局注册,这样在每个组件都能通过 this 访问到它,由于 Bus 本身就是一个 vue 实例,所以具备 $emit 和 $on 方法,这样我们就能在 Bus 上通过自定义事件的方式发送和监听事件来传递数据,而且不受组件的位置关系影响。
具体使用如下:
1. 在 main.js 里面
将 bus 从 通过 Vue.prototype 全局注册,这样在所有的vue实例中都能通过 this.$bus 访问到 Bus:
import Vue from 'vue'
const bus = new Vue()
Vue.prototype.$bus = bus
2. 在需要发送或接收事件的组件里面
// 触发事件
this.$bus.$emit('my-event', this.data);
// 监听事件
this.$bus.$on('my-event', this.handleFunction);
// 取消事件
this.$bus.$off('my-event', this.handleFunction);
// 实际使用场景,在需要监听事件的组件中 在 created监听,在beforeDestroy中取消
created (){
this.$bus.$on('switch-change', this.switchChange);
},
beforeDestroy () {
this.$bus.$off('switch-change', this.switchChange);
},
二、状态管理模式 vueX
Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。Vuex 也集成到 Vue 的官方调试工具 devtools extension,提供了诸如零配置的 time-travel 调试、状态快照导入导出等高级调试功能。具体实现这里有详细的介绍
Vue 非父子组件通信方案的更多相关文章
- Vue 非父子组件通信
组件是Vue核心的一块内容,组件之间的通信也是很基本的开发需求.组件通信又包括父组件向子组件传数据,子组件向父组件传数据,非父子组件间的通信.前两种通信Vue的文档都说的很清楚,但是第三种文档上确只有 ...
- 详解Vue 非父子组件通信方法(非Vuex)
假设 bb 组件里面有个按钮,点击按钮,把 123 传递给 aa 组件 // 根组件(this.$root) new Vue({ el: '#app', router, render: h => ...
- vue父子组件及非父子组件通信
1.父组件传递数据给子组件 父组件数据如何传递给子组件呢?可以通过props属性来实现 父组件: <parent> <child :child-msg="msg" ...
- vue组件通信之非父子组件通信
什么顺序不顺序的.. 先来说说非父子组件通信. 首先,我们先来了解下vue中的 1.$emit 触发当前实例上的事件,附加参数都会传给监听器回调. 2.$on 监听当前实例上的自定义事件.事件可以 ...
- vue2.0父子组件以及非父子组件通信
官网API: https://cn.vuejs.org/v2/guide/components.html#Prop 一.父子组件通信 1.父组件传递数据给子组件,使用props属性来实现 传递普通字符 ...
- vue2.0父子组件以及非父子组件通信传参详解
1.父组件传递数据给子组件 父组件数据如何传递给子组件呢?可以通过props属性来实现 父组件: <parent> <child :child-msg="msg" ...
- vue 2 使用Bus.js进行兄弟(非父子)组件通信 简单案例
vue2中废弃了$dispatch和$broadcast广播和分发事件的方法.父子组件中可以用props和$emit().如何实现非父子组件间的通信,可以通过实例一个vue实例Bus作为媒介,要相互通 ...
- vue 非父子组件传值
/*非父子组件传值 1.新建一个js文件 然后引入vue 实例化vue 最后暴露这个实例 2.在要广播的地方引入刚才定义的实例 3.通过 VueEmit.$emit('名称','数据') 4.在接收收 ...
- vue非父子组件间传参问题
最近在使用vue进行开发,遇到了组件之间传参的问题,此处主要是针对非父子组件之间的传参问题进行总结,方法如下:一.如果两个组件用友共同的父组件,即 FatherComponent.vue代码 < ...
随机推荐
- VS2012编译log4cpp1.1.1版本
1.起因 看到官方网站上的log4cpp的代码已经更新到了1.1.1,而我目前使用的1.0.3版本,所以想使用下最新版本.在使用过程中发现相对于老版本,新版本的变化还是比较大的,特写下此文记录下. 2 ...
- 测试人员如何使用Git部署测试环境
Git是分布式的版本控制系统. 作为一名Git的小白使用者,一开始接触很懵逼,因为总担心自己一不小心误操作影响代码仓库的代码,网络上关于Git的使用多从开发的角度,很少有人从测试的角度来介绍Git的使 ...
- 使用performance进行网页性能监控
由于项目需要, 需要对网页的一些性能进行监控, 接触到了performance, window.performance 提供了一组精确的数据,经过简单的计算就能得出一些网页性能数据, 将这些数据存储为 ...
- Ubuntu16.04解决无法切换root权限的问题
在su root时发现无法切换到root权限.显示: /usr/local/bin/zsh 没有文件或目录 想了想问题所在,突然想起来前段时间想要更换shell主题,于是装了zsh和oh-my-zsh ...
- nginx/php-fpm 访问php文件直接下载而不运行
遇到这种问题,首先确认你web服务器配置中的.PHP是不是被指定给FastCGI server处理: location ~ .php$ { fastcgi_pass ; } 如已配置,那么可能是由于f ...
- 拥抱.NET Core系列:MemoryCache 初识
Cache是一个绝大多数项目会用到的一个技术,说起到缓存可能就联想到 Set.Add.Get.Remove.Clear 这几个方法.那么在.NET Core中微软给我们带来了什么样的缓存体验呢?今天我 ...
- JVM中对象访问定位两种方式
1.通过句柄方式访问, 在Java堆中分出一块内存进行存储句柄池,这样的话,在栈中存储的是句柄的地址 优点: 当对象移动的时候(垃圾回收的时候移动很普遍),这样值需要改变句柄中的指针,但是栈中的指针不 ...
- Windows Sublime Text 配置Linux子系统(WSL)下的 gcc/g++ 编译环境
0. 简介(若已了解背景可以跳过此部分) Windows 10 Build 14316以上版本中加入了"Windows系统的Linux子系统"(Windows Subsystem ...
- Tensorflow中实现BN为什么需要加入这个额外依赖?见CS231N作业源码
batch normalization in tensorflow requires this extra dependency 为什么加上这两句? extra_update_ops = tf.get ...
- postman模拟HttpPost请求的方法
开始想装postman的Google浏览器插件的,但是发现应用商店无法搜索,下载的拖进扩展也装不上... 于是找到了这个绿色版的Postman桌面程序!有需要的可以下载,点击下载:http://dow ...