vue中不同情况下怎么进行通讯?下面本篇文章给大家分析一下vue中不同情况下的通讯方式,希望对大家有所帮助!

其实对于vue中组件通讯这件事大家也都不陌生。甚至张口就来,毕竟这也是面试中的经常会问到的。由于之前没有进行过细致的考虑,在写小项目的时候遇到了组件中通讯的需求,然后上来就写,结果发现没有用,查了好久才知道那种方式不适用这样情况。所以经过这次事情决定写篇文章,对于通讯方式进行更清楚更细致的分类,毕竟不是每种通讯方式都适用于所有场景。(学习视频分享:vuejs教程)
同窗口(也就是同浏览器同一个页签内)
同浏览器同页签内主要涉及的就是父子组件的传值。
vuex:状态管理器:适用一个项目里的任何组件,包容性极强
对于状态管理器的概念大家应该也不会陌生。
立即学习“前端免费学习笔记(深入)”;
- 多个组件可以共享一个或者多个状态值。不管组件的层级有多深都可以正常访问。所以这是一种官方直接支持的通讯方式。
- 注意:对于小型单页应用而言,该选择并不是很建议,对于小型项目而言使用vuex反而会变得更加繁琐,就像是一个75斤150cm的人,穿了一件170cm110斤人的衣服一样,看着就很松松垮垮撑不起来。
provide / inject (写法基于v2.2.1及以上版本):适用N级组件,但是必须是单线传承的那种
这对选项需要一起使用,以允许一个祖先组件向其所有子孙后代注入一个依赖,不论组件层次有多深,并在其上下游关系成立的时间里始终生效。
- 就是相当于有一个N层楼的楼房,最顶层的是父级组件,每层楼之间会公用一个管子,这个管子就是provide。而管子在每层楼都有一个出口叫:inject
- 注意:
provide和inject绑定并不是可响应的。不过如果你传入了一个可监听的对象,那么其对象的 property 还是可响应的。 - 让咱们来看看代码
// parent.vue // 此处忽略template模板的东西
// child.vue // 此处忽略template模板的东西
props:适用相邻两组件的传值(父->子);$emit: 子 -> 父
正经的props/$emit可太常见了,都是用烂了的,就不用写示例代码了吧。
- 只适用于相邻级别的父子组件之间传值
- 对于多级组件的传值虽然也能用props传,但是吧,这样的话会让代码很难维护,极其不推荐。
eventBus: 地位与vuex差不多,适用任意组件,包容性极强
问题:
- 不方便维护:如果在项目里用的多了,可能出现方法名冲突导致异常的问题,而且比较不方便排查。
- 示例:
// utils/eventBus.js import Vue from 'vue' const EventBus = new Vue() export default EventBus
// main.js // 进行全局挂载 import eventBus from '@/utils/eventBus' Vue.prototype.$eventBos = eventBus
// views/parent.vue









