详解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 播放器 控制
Jan 22 Javascript
JavaScript 拾漏补遗
Dec 27 Javascript
Jquery Ajax 学习实例2 向页面发出请求 返回JSon格式数据
Mar 15 Javascript
javascript JSON操作入门实例
Apr 16 Javascript
运算符&amp;&amp;的三个不同层次
Apr 07 Javascript
使用jquery自定义鼠标样式满足个性需求
Nov 05 Javascript
微信小程序之小豆瓣图书实例
Nov 30 Javascript
VueJS组件之间通过props交互及验证的方式
Sep 04 Javascript
Vue封装Swiper实现图片轮播效果
Feb 06 Javascript
Vue 实现显示/隐藏层的思路(加全局点击事件)
Dec 31 Javascript
JS实现4位随机验证码
Oct 19 Javascript
微信小程序APP页面的之间的相互传递参数以及自定义组件
Apr 19 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压缩HTML函数轻松实现压缩html/js/Css及注意事项
2013/01/27 PHP
php中stream(流)的用法
2014/03/25 PHP
yii实现创建验证码实例解析
2014/07/31 PHP
PHP添加文字水印或图片水印的水印类完整源代码与使用示例
2019/03/18 PHP
jQuery 表格工具集
2010/04/25 Javascript
js判断选择时间不能小于当前时间的示例代码
2013/09/24 Javascript
jquery+html5制作超酷的圆盘时钟表
2015/04/14 Javascript
基于BootStrap的图片轮播效果展示实例代码
2016/05/23 Javascript
js实现碰撞检测特效代码分享
2016/10/16 Javascript
扩展jquery easyui tree的搜索树节点方法(推荐)
2016/10/28 Javascript
javascript 组合按键事件监听实现代码
2017/02/21 Javascript
整理关于Bootstrap过渡动画的慕课笔记
2017/03/29 Javascript
JS排序之快速排序详解
2017/04/08 Javascript
JS实现移动端按首字母检索城市列表附源码下载
2017/07/05 Javascript
vue项目部署上线遇到的问题及解决方法
2018/06/10 Javascript
关于vue.js中实现方法内某些代码延时执行
2019/11/14 Javascript
微信小程序 scroll-view 实现锚点跳转功能
2019/12/12 Javascript
TypeScript魔法堂之枚举的超实用手册
2020/10/29 Javascript
linux系统使用python获取cpu信息脚本分享
2014/01/15 Python
Python实现文件按照日期命名的方法
2015/07/09 Python
Python 使用PIL numpy 实现拼接图片的示例
2018/05/08 Python
python爬取微信公众号文章
2018/08/31 Python
python gensim使用word2vec词向量处理中文语料的方法
2019/07/05 Python
pytorch torchvision.ImageFolder的用法介绍
2020/02/20 Python
如何实现一个python函数装饰器(Decorator)
2020/10/12 Python
Selenium执行完毕未关闭chromedriver/geckodriver进程的解决办法(java版+python版)
2020/12/07 Python
美国受欢迎的女性牛仔裤品牌:DL1961
2016/11/12 全球购物
ORLY官网:美国专业美甲一线品牌
2019/12/11 全球购物
产品销售员岗位职责
2013/12/18 职场文书
农民工讨薪标语
2014/06/26 职场文书
公司离职证明范本(5篇)
2014/09/17 职场文书
2014年业务员工作总结范文
2014/11/17 职场文书
电信营业员岗位职责
2015/04/14 职场文书
车辆安全隐患排查制度
2015/08/05 职场文书
一篇文章弄懂MySQL查询语句的执行过程
2021/05/07 MySQL
一文读懂navicat for mysql基础知识
2021/05/31 MySQL