Vue组件通信中非父子组件传值知识点总结


Posted in Javascript onDecember 05, 2019

前言:

如果想要了解非父子关系的组件传值,最好是在了解父传子和子传父的基础上在来了解非父子传值可能会有更透彻的思路。

因为非父子传值是通过定义事件总线来代理实现父传子+子传父从而实现的传值方式。

这是我总结的父子传值相关的知识,可供参考:  https://3water.com/article/121806.htm

然后大概回顾一下父子传值的过程:

Vue组件通信中非父子组件传值知识点总结

根据上述信息可知,如果两个组件需要传递值那么需要这两个组件之间是父子关系才能传递数据。

那么如果有这样一个组件,既可以帮你传递数据,又可以帮你接收数据该多好啊?

于是乎,一个叫事件总线的概念出现了,它就可以帮助实现你想要的这些功能。

了解事件总线之前,需要先看下两个重要的方法。

前置知识: 

1. $emit(event, data)方法

event: 触发的事件类型

data: 触发这个事件时传递的参数

2. $on(event, callBack(data))方法

event: 绑定的事件类型

callBack: 绑定的这个事件所对应的回调函数,其默认的第一个参数data是使用$emit触发这个事件时所传递的参数

在了解了这两个方法后,再来看下面的这张图:

Vue组件通信中非父子组件传值知识点总结

如果还是不太明白,那就转换成代码在分析一下:

首先,定义一个eventBus: 

// eventBus.js 
// 事件总线: 只需要导出一个Vue实例即可
import Vue from 'vue'
export default new Vue()

然后,在A组件中导入eventBus, 并触发自定义的AtoB事件

// A.vue// 导入eventBus
import eventBus from "./eventBus"

// 触发事件并传递参数
eventBus.$emit("AtoB", "Data_A")

最后,在B组件中导入eventBus,并监听自定义的AtoB事件

// B.vue// 导入eventBus
import eventBus from "./eventBus"

// 触发事件并传递参数
eventBus.$on("AtoB", data =>{
  console.log(data); // "Data_A" 
})

总结:

要想了解非父子传值必先了解父子间的传值非父子传值的核心在于通过事件总线作为一个中介然后通过在“传递值”的组件中触发事件总线的某个自定义的事件来传递一个值(如果是多个值,可以传递一个对象) 最后在“接收值”的组件中来监听事件总线中你触发的那个自定义事件来接收数据

以上就是本次介绍的全部相关知识点,感谢大家的学习和对三水点靠木的支持。

Javascript 相关文章推荐
Div自动滚动到末尾的代码
Oct 26 Javascript
鼠标滚轮改变图片大小的示例代码
Nov 20 Javascript
jQuery异步验证用户名是否存在示例代码
May 21 Javascript
js同源策略详解
May 21 Javascript
JavaScript时间操作之年月日星期级联操作
Jan 15 Javascript
JavaScript基础语法之js表达式
Jun 07 Javascript
关于vue v-for循环解决img标签的src动态绑定问题
Sep 18 Javascript
基于Node的Axure文件在线预览的实现代码
Aug 28 Javascript
Vue解析剪切板图片并实现发送功能
Feb 04 Javascript
微信小程序去除左上角返回键的实现方法
Mar 06 Javascript
JavaScript实现随机点名程序
Mar 25 Javascript
uni-app使用countdown插件实现倒计时
Nov 01 Javascript
基于javascript实现贪吃蛇经典小游戏
Apr 10 #Javascript
微信小程序登录时如何获取input框中的内容
Dec 04 #Javascript
微信小程序日历插件代码实例
Dec 04 #Javascript
微信小程序request请求封装,验签代码实例
Dec 04 #Javascript
vue中使用极验验证码的方法(附demo)
Dec 04 #Javascript
基于vue-cli3创建libs库的实现方法
Dec 04 #Javascript
使用vue-cli4.0快速搭建一个项目的方法步骤
Dec 04 #Javascript
You might like
php ajax异步读取rss文档数据
2016/03/29 PHP
laravel 解决paginate查询多个字段报错的问题
2019/10/22 PHP
什么是JavaScript
2009/08/13 Javascript
学习ExtJS Panel常用方法
2009/10/07 Javascript
页面中iframe相互传值传参
2009/12/13 Javascript
jQuery常见开发技巧详细整理
2013/01/02 Javascript
Extjs4 GridPanel 的几种样式使用介绍
2013/04/18 Javascript
JavaScript sub方法入门实例(把字符串显示为下标)
2014/10/17 Javascript
JQuery遍历json数组的3种方法
2014/11/08 Javascript
谈一谈javascript中继承的多种方式
2016/02/19 Javascript
非常漂亮的相册集 使用jquery制作相册集
2016/04/28 Javascript
js选择器全面解析
2016/06/27 Javascript
Bootstrap表格制作代码
2017/03/17 Javascript
浅谈vue中.vue文件解析流程
2018/04/24 Javascript
解决vue项目刷新后,导航菜单高亮显示的位置不对问题
2019/11/01 Javascript
Javascript中的this,bind和that使用实例
2019/12/05 Javascript
[45:10]NB vs Liquid Supermajor小组赛 A组胜者组决赛 BO3 第二场 6.2
2018/06/04 DOTA
[01:10:27]DOTA2-DPC中国联赛正赛 SAG vs XG BO3 第二场 3月5日
2021/03/11 DOTA
Python实现将一个正整数分解质因数的方法分析
2017/12/14 Python
pytorch训练imagenet分类的方法
2018/07/27 Python
利用ctypes获取numpy数组的指针方法
2019/02/12 Python
Python 从subprocess运行的子进程中实时获取输出的例子
2019/08/14 Python
django模型类中,null=True,blank=True用法说明
2020/07/09 Python
CSS3 animation实现简易幻灯片轮播特效
2016/09/27 HTML / CSS
HTML5中的nav标签学习笔记
2016/06/24 HTML / CSS
送给他或她的礼物:FUN.com
2018/08/17 全球购物
信息技术专业个人自我评价
2013/12/11 职场文书
商务邀请函范文
2014/01/14 职场文书
人力资源管理专业自荐书范文
2014/02/10 职场文书
购房意向书
2014/04/01 职场文书
家长通知书家长评语
2014/04/17 职场文书
班组长安全工作职责
2014/07/15 职场文书
2015年小学语文教学工作总结
2015/05/25 职场文书
2016年幼儿园庆六一开幕词
2016/03/04 职场文书
Angular性能优化之第三方组件和懒加载技术
2021/05/10 Javascript
Python自动化实战之接口请求的实现
2022/05/30 Python