vue2.0父子组件间通信的实现方法


Posted in Javascript onApril 19, 2017

1.父组件传递数据给子组件

父组件数据如何传递给子组件呢?可以通过props属性来实现

父组件:

<parent> 
<child :child-msg="msg"></child>//这里必须要用 - 代替驼峰
</parent>
data(){ return { msg: [1,2,3] };}

子组件通过props来接收数据:

方式1:

props: ['childMsg']

方式2 :

props: { childMsg: Array //这样可以指定传入的类型,如果类型不对,会警告}
props: { childMsg: { type: Array, default: [0,0,0] //这样可以指定默认的值 }}

这样呢,就实现了父组件向子组件传递数据.

2.子组件与父组件通信

那么,如果子组件想要改变数据呢?这在vue中是不允许的,因为vue只允许单向数据传递,这时候我们可以通过触发自定义事件来通知父组件改变数据,从而达到改变子组件数据的目的.

使用 v-on 绑定自定义事件

每个 Vue 实例都实现了事件接口(Events interface),即:

  1. 使用 $on(eventName) 监听事件
  2. 使用 $emit(eventName) 触发事件

父组件可以在使用子组件的地方直接用 v-on 来监听子组件触发的事件。

子组件:

<template>
<div @click="up">
</div>
</template>
methods: { up() { this.$emit('resultChange','hehe');
      //主动触发resultChange方法,'hehe'为向父组件传递的数据 }}

父组件:

<div>
<child @on-result-change="mychangHandle" :msg="msg">
</child> //监听子组件触发的upup事件,然后调用change方法
</div>
methods: { mychangHandle(msg) { this.msg = msg; }}

触发事件使用驼峰格式的自定义事件名称,在父组件中就可以使用on-evnet-name的形式来监听。

3.任意组件间通信

如果2个组件不是父子组件那么如何通信呢?这时可以通过eventHub来实现通信.

所谓eventHub就是创建一个事件中心,相当于中转站,可以用它来传递事件和接收事件.

使用一个空的 Vue 实例作为中央事件总线:

let Hub = new Vue(); //创建事件中心,注意Hub要放在全局

组件1触发:

<div @click="eve">
</div>
methods: { eve() { Hub.$emit('change','hehe'); //Hub触发事件 }}

组件2接收:

<div></div>
created() { Hub.$on('change', () => { //Hub接收事件 this.msg = 'hehe'; });}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Jquery 扩展方法
May 06 Javascript
Jquery增加鼠标中间功能mousewheel的实例代码
Sep 05 Javascript
通过onmouseover选项卡实现img图片的变化
Feb 12 Javascript
AngularJS基础 ng-mouseenter 指令示例代码
Aug 02 Javascript
AngularJS 工作原理详解
Aug 18 Javascript
jQuery多选框选择数量限制方法
Feb 08 Javascript
浅谈JS验证表单文本域输入空格的问题
Feb 14 Javascript
Angular客户端请求Rest服务跨域问题的解决方法
Sep 19 Javascript
JS简单获取并修改input文本框内容的方法示例
Apr 08 Javascript
前后端如何实现登录token拦截校验详解
Sep 03 Javascript
jQuery访问json文件中数据的方法示例
Jan 28 jQuery
JS校验与最终登陆界面功能完整示例
Jan 13 Javascript
JS条形码(一维码)插件JsBarcode用法详解【编码类型、参数、属性】
Apr 19 #Javascript
微信小程序页面传值实例分析
Apr 19 #Javascript
Vuejs入门教程之Vue生命周期,数据,手动挂载,指令,过滤器
Apr 19 #Javascript
bootstrap日期控件问题(双日期、清空等问题解决)
Apr 19 #Javascript
angular-cli修改端口号【angular2】
Apr 19 #Javascript
Angular2自定义分页组件
Apr 19 #Javascript
详解vue表单验证组件 v-verify-plugin
Apr 19 #Javascript
You might like
php查看session内容的函数
2008/08/27 PHP
PHP查询网站的PR值
2013/10/30 PHP
实例讲解PHP设计模式编程中的简单工厂模式
2016/02/29 PHP
php+ajax实现带进度条的上传图片功能【附demo源码下载】
2016/09/14 PHP
laravel admin实现分类树/模型树的示例代码
2020/06/10 PHP
jQuery EasyUI中对表格进行编辑的实现代码
2010/06/10 Javascript
JS获得URL超链接的参数值实例代码
2013/06/21 Javascript
jQuery给多个不同元素添加class样式的方法
2015/03/26 Javascript
javascript动态创建链接的方法
2015/05/13 Javascript
详解AngularJS中的表格使用
2015/06/16 Javascript
跟我学习javascript的call(),apply(),bind()与回调
2015/11/16 Javascript
详解JavaScript逻辑And运算符
2015/12/04 Javascript
给vue项目添加ESLint的详细步骤
2017/09/29 Javascript
详解js中let与var声明变量的区别
2020/04/05 Javascript
JS获取当前时间的年月日时分秒及时间的格式化的方法
2019/12/18 Javascript
js实现轮播图效果 纯js实现图片自动切换
2020/08/09 Javascript
js实现三角形粒子运动
2020/09/22 Javascript
一篇文章看懂JavaScript中的回调
2021/01/05 Javascript
[01:10]DOTA2 Supermajor:英雄,由我们见证
2018/05/14 DOTA
[43:41]VP vs RNG 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.21.mp4
2020/07/19 DOTA
python实现决策树分类(2)
2018/08/30 Python
python跳出双层for循环的解决方法
2019/06/24 Python
基于python实现FTP文件上传与下载操作(ftp&amp;sftp协议)
2020/04/01 Python
解决Python中报错TypeError: must be str, not bytes问题
2020/04/07 Python
pycharm sciview的图片另存为操作
2020/06/01 Python
Python实现对word文档添加密码去除密码的示例代码
2020/12/29 Python
瑜伽服装品牌:露露柠檬(lululemon athletica)
2017/06/04 全球购物
ddl,dml和dcl的含义
2016/05/08 面试题
美容院考勤制度
2014/01/30 职场文书
淘宝中秋节活动方案
2014/01/31 职场文书
幼儿园毕业典礼主持词
2014/03/21 职场文书
师德师风的心得体会
2014/09/02 职场文书
考研复习计划
2015/01/19 职场文书
兵马俑的导游词
2015/02/02 职场文书
死者家属慰问信
2015/03/24 职场文书
2015年教师业务工作总结
2015/05/26 职场文书