详解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 相关文章推荐
jquery 模式对话框终极版实现代码
Sep 28 Javascript
javascript中的关于类型转换的性能优化
Dec 14 Javascript
Prototype源码浅析 Enumerable部分之each方法
Jan 16 Javascript
js将json格式内容转换成对象的方法
Nov 01 Javascript
Event altKey,ctrlKey,shiftKey属性解析
Dec 18 Javascript
js实现仿QQ秀换装效果的方法
Mar 04 Javascript
jQuery UI设置固定日期选择特效代码分享
Aug 27 Javascript
js淡入淡出焦点图幻灯片效果代码分享
Sep 08 Javascript
JS区分Object与Aarry的六种方法总结
Feb 27 Javascript
jQuery实现拼图小游戏(实例讲解)
Jul 24 jQuery
解决Vue编译时写在style中的路径问题
Sep 21 Javascript
微信小程序版翻牌小游戏
Jan 26 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
php开发过程中关于继承的使用方法分享
2011/06/17 PHP
浅谈PHP变量作用域以及地址引用问题
2013/12/27 PHP
php for 循环使用的简单实例
2016/06/02 PHP
PHP实现的Redis多库选择功能单例类
2017/07/27 PHP
ThinkPHP3.2.3框架实现的空模块、空控制器、空操作,跳转到错误404页面图文详解
2019/04/03 PHP
Laravel+Intervention实现上传图片功能示例
2019/07/09 PHP
JS俄罗斯方块,包含完整的设计理念
2010/12/11 Javascript
jQuery实现表头固定效果的实例代码
2013/05/24 Javascript
jQuery修改CSS伪元素属性的方法
2014/07/30 Javascript
JavaScript事件委托实例分析
2015/05/26 Javascript
浅谈jquery的html方法里包含特殊字符的处理
2016/11/30 Javascript
详解JavaScript常量定义
2017/01/03 Javascript
Angular中$broadcast和$emit的使用方法详解
2017/05/22 Javascript
JS移动端/H5同时选择多张图片上传并使用canvas压缩图片
2017/06/20 Javascript
mpvue跳转页面及注意事项
2018/08/03 Javascript
angularJs使用ng-repeat遍历后选中某一个的方法
2018/09/30 Javascript
vue实现表单录入小案例
2019/09/27 Javascript
使用webpack搭建vue环境的教程详解
2019/12/31 Javascript
Vue数字输入框组件示例代码详解
2020/01/15 Javascript
微信小程序仿通讯录功能
2020/04/09 Javascript
[07:20]2014DOTA2西雅图国际邀请赛 选手讲解积分赛第二天
2014/07/11 DOTA
[02:23]完美世界全国高校联赛街访DOTA2第一期
2019/11/28 DOTA
Python编写检测数据库SA用户的方法
2014/07/11 Python
Python计算已经过去多少个周末的方法
2015/07/25 Python
python从子线程中获得返回值的方法
2019/01/30 Python
HTML5 b和i标记将被赋予真正的语义
2009/07/16 HTML / CSS
波兰最早的运动鞋精品店之一:Street Supply
2019/08/29 全球购物
策划助理岗位职责
2013/11/18 职场文书
前台接待岗位职责
2013/12/03 职场文书
校本教研工作方案
2014/01/14 职场文书
大学生军训广播稿
2014/01/24 职场文书
财务简历的自我评价
2014/03/05 职场文书
股东授权委托书范文
2014/09/13 职场文书
领导干部民主生活会自我剖析材料范文
2014/09/20 职场文书
2015年幼儿教育工作总结
2015/07/24 职场文书
Python装饰器的练习题
2021/11/23 Python