详解Vue2中组件间通信的解决全方案


Posted in Javascript onJuly 28, 2017

前言

在Vue中组件是实现模块化开发的主要内容,而组件的通信更是vue数据驱动的灵魂,下面这篇文章将给大家介绍关于Vue2组件间通信的相关内容,下面话不多说,来一起看看详细的介绍。

组件通讯包括:父子组件间的通信和兄弟组件间的通信。在组件化系统构建中,组件间通信必不可少的。

父组件--> 子组件

1. 属性设置

父组件关键代码如下:

<template>
 <Child :child-msg="msg"></Child>
</template>

子组件关键代码如下:

export default {
 name: 'child',
 props: {
 child-msg: String
 }
};

child-msg 为父组件给子组件设置的额外属性值,属性值需在子组件中设置props,子组件中可直接使用child-msg变量。

2. 子组件调用父组件

子组件通过 $parent 获得父组件,通过 $root 获得最上层的组件。

子组件--> 父组件

1. 发送事件/监听事件

子组件中某函数内发送事件:

this.$emit('toparentevent', 'data');

父组件监听事件:

<Child :msg="msg" @toparentevent="todo()"></Child>

toparentevent 为子组件自定义发送事件名称,父组件中@toparentevent为监听事件,todo为父组件处理方法。

2. 父组件直接获取子组件属性或方法

给要调用的子组件起个名字。将名字设置为子组件 ref 属性的值。

<!-- 子组件。 ref的值是组件引用的名称 -->
<child-component ref="aName"></child-component>

父组件中通过 $refs.组件名 来获得子组件,也就可以调用子组件的属性和方法了。

var child = this.$refs.aName
child.属性
child.方法()

父组件通过 $children 可以获得所有直接子组件(父组件的子组件的子组件不是直接子组件)。需要注意 $children 并不保证顺序,也不是响应式的。

Bus中央通信

目前中央通信是解决兄弟间通信,祖父祖孙间通信的最佳方法,不仅限于此,也可以解决父组件子组件间的相互通信。如下图:

详解Vue2中组件间通信的解决全方案

各组件可自己定义好组件内接收外部组件的消息事件即可,不用理会是哪个组件发过来;而对于发送事件的组件,亦不用理会这个事件到底怎么发送给我需要发送的组件。

先设置Bus

//bus.js 
import Vue from 'vue'
export default new Vue();

组件内监听事件:

import bus from '@/bus';

export default {
 name: 'childa',
 methods: {
 },
 created() {
 bus.$on('childa-message', function(data) {
 console.log('I get it');
 });
 }
};

发送事件的组件:

import bus from '@/bus';
//方法内执行下面动作
bus.$emit('childa-message', this.data);

Bus中央通信的方案各种情况下都可用,比较方便,具体内在原理后续更新说明。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者使用vue能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
用JavaScript将从数据库中读取出来的日期型格式化为想要的类型。
Aug 15 Javascript
IE6 弹出Iframe层中的文本框“经常”无法获得输入焦点
Dec 27 Javascript
artDialog 4.1.5 Dreamweaver代码提示/补全插件 附下载
Jul 31 Javascript
Jqgrid表格随窗口大小改变而改变的简单实例
Dec 28 Javascript
JavaScript的各种常见函数定义方法
Sep 16 Javascript
window.onerror()的用法与实例分析
Jan 27 Javascript
浏览器兼容的JS写法总结
Apr 27 Javascript
深入理解JavaScript中Ajax
Aug 02 Javascript
关于JavaScript中事件绑定的方法总结
Oct 26 Javascript
JS实现间歇滚动的运动效果实例
Dec 22 Javascript
JS 正则表达式验证密码、邮箱格式的实例代码
Oct 28 Javascript
vue 使用localstorage实现面包屑的操作
Nov 16 Javascript
详解React 16 中的异常处理
Jul 28 #Javascript
JavaScript截屏功能的实现代码
Jul 28 #Javascript
BootStrap selectpicker后台动态绑定数据的方法
Jul 28 #Javascript
详解angularjs的数组传参方式的简单实现
Jul 28 #Javascript
js 获取html5的data属性实现方法
Jul 28 #Javascript
jQuery获取table表中的td标签(实例讲解)
Jul 28 #jQuery
浅谈JS中的常用选择器及属性、方法的调用
Jul 28 #Javascript
You might like
php4的彩蛋
2006/10/09 PHP
PHP中str_replace函数使用小结
2008/10/11 PHP
file_get_contents(&quot;php://input&quot;, &quot;r&quot;)实例介绍
2013/07/01 PHP
php的mssql数据库连接类实例
2014/11/28 PHP
Yii 使用intervention/image拓展实现图像处理功能
2019/06/22 PHP
RR vs IO BO3 第一场2.13
2021/03/10 DOTA
基于JQuery的动态删除Table表格的行和列的代码
2011/05/12 Javascript
Jquery Change与bind事件代码
2011/09/29 Javascript
关于onchange事件在IE和FF下的表现及解决方法
2014/03/08 Javascript
基于jQuery实现的美观星级评论打分组件代码
2015/10/30 Javascript
js中字符串编码函数escape()、encodeURI()、encodeURIComponent()区别详解
2016/04/01 Javascript
简单解析JavaScript中的__proto__属性
2016/05/10 Javascript
JS 实现Base64编码与解码实例详解
2016/11/07 Javascript
Angular在一个页面中使用两个ng-app的方法(二)
2017/02/20 Javascript
jquery实现图片上传前本地预览
2017/04/28 jQuery
Angular2使用Angular CLI快速搭建工程(一)
2017/05/21 Javascript
图片懒加载imgLazyLoading.js使用详解
2020/09/15 Javascript
Centos5.x下升级python到python2.7版本教程
2015/02/14 Python
python基础教程之匿名函数lambda
2017/01/17 Python
Collatz 序列、逗号代码、字符图网格实例
2017/06/22 Python
python实现Decorator模式实例代码
2018/02/09 Python
shell命令行,一键创建 python 模板文件脚本方法
2018/03/20 Python
浅析python中numpy包中的argsort函数的使用
2018/08/30 Python
Python根据欧拉角求旋转矩阵的实例
2019/01/28 Python
python读写配置文件操作示例
2019/07/03 Python
linux系统下pip升级报错的解决方法
2021/01/31 Python
HTML5逐步分析实现拖放功能的方法
2020/09/30 HTML / CSS
大学生护理专业自荐信
2013/10/03 职场文书
心得体会范文
2014/01/04 职场文书
企业管理标语
2014/06/10 职场文书
公安机关查摆剖析材料
2014/10/10 职场文书
自荐信格式范文
2015/03/04 职场文书
导游词之永泰公主墓
2019/12/04 职场文书
总结Java对象被序列化的两种方法
2021/06/30 Java/Android
python神经网络学习 使用Keras进行回归运算
2022/05/04 Python
SQL解决未能删除约束问题drop constraint
2022/05/30 SQL Server