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 相关文章推荐
jqGrid jQuery 表格插件测试代码
Aug 23 Javascript
js验证是否为数字的总结
Apr 14 Javascript
轻松实现Bootstrap图片轮播
Apr 20 Javascript
JavaScript中利用jQuery绑定事件的几种方式小结
Mar 06 Javascript
随机生成10个不重复的0-100的数字(实例讲解)
Aug 16 Javascript
js编写简单的聊天室功能
Aug 17 Javascript
详解Web使用webpack构建前端项目
Sep 23 Javascript
vue实现tab切换外加样式切换方法
Mar 16 Javascript
Vue写一个简单的倒计时按钮功能
Apr 20 Javascript
Angular Renderer (渲染器)的具体使用
May 03 Javascript
jQuery实现获取form表单内容及绑定数据到form表单操作分析
Jul 03 jQuery
在Vuex使用dispatch和commit来调用mutations的区别详解
Sep 18 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
PHILIPS D1835/D1875的电路分析与打理
2021/03/02 无线电
php 清除网页病毒的方法
2008/12/05 PHP
php实现scws中文分词搜索的方法
2015/12/25 PHP
PHP验证码生成原理和实现
2016/01/24 PHP
Zend Framework教程之视图组件Zend_View用法详解
2016/03/05 PHP
Yii2.0 模态弹出框+ajax提交表单
2016/05/22 PHP
使用php自动备份数据库表的实现方法
2017/07/28 PHP
JQuery学习笔记 nt-child的使用
2011/01/17 Javascript
40个新鲜出炉的jQuery 插件和免费教程[上]
2012/07/24 Javascript
JQuery操作iframe父页面与子页面的元素与方法(实例讲解)
2013/11/20 Javascript
JS判断客户端是手机还是PC的2个代码
2014/04/12 Javascript
jquery动态改变div宽度和高度
2015/02/09 Javascript
node.js中格式化数字增加千位符的几种方法
2015/07/03 Javascript
KnockoutJS 3.X API 第四章之数据控制流with绑定
2016/10/10 Javascript
微信小程序 radio单选框组件详解及实例代码
2017/01/10 Javascript
jQuery中DOM节点的删除方法总结(超全面)
2017/01/22 Javascript
详解开源的JavaScript插件化框架MinimaJS
2017/10/26 Javascript
详解react-router 4.0 下服务器如何配合BrowserRouter
2017/12/29 Javascript
js实现复制功能(多种方法集合)
2018/01/06 Javascript
AngularJS使用Filter自定义过滤器控制ng-repeat去除重复功能示例
2018/04/21 Javascript
JS实现的视频弹幕效果示例
2018/08/17 Javascript
Python使用chardet判断字符编码
2015/05/09 Python
Python类属性的延迟计算
2016/10/22 Python
python的pandas工具包,保存.csv文件时不要表头的实例
2018/06/14 Python
Python数据预处理之数据规范化(归一化)示例
2019/01/08 Python
Keras 加载已经训练好的模型进行预测操作
2020/06/17 Python
《秋游》教学反思
2014/04/24 职场文书
一体化教学实施方案
2014/05/10 职场文书
事业单位鉴定材料
2014/05/25 职场文书
小学生感恩老师演讲稿
2014/08/28 职场文书
幼儿园法制宣传日活动总结
2014/11/01 职场文书
自书遗嘱范文
2015/08/07 职场文书
关于五一放假的通知
2015/08/18 职场文书
班主任工作经验交流会总结
2015/11/02 职场文书
会计工作自我鉴定范文
2019/06/21 职场文书
关于使用Redisson订阅数问题
2022/01/18 Redis