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 相关文章推荐
js option删除代码集合
Nov 12 Javascript
扩展Jquery插件处理mouseover时内部有子元素时发生样式闪烁
Dec 08 Javascript
js中键盘事件实例简析
Jan 10 Javascript
跟我学习javascript的异步脚本加载
Nov 20 Javascript
JavaScript添加随滚动条滚动窗体的方法
Feb 23 Javascript
基于angularjs实现图片放大镜效果
Aug 31 Javascript
JS优化与惰性载入函数实例分析
Apr 06 Javascript
BootStrap下的弹出框加载select2框架失败的解决方法
Aug 31 Javascript
微信小程序云开发 生成带参小程序码流程
May 18 Javascript
Vue数据驱动表单渲染,轻松搞定form表单
Jul 19 Javascript
jQuery操作元素追加内容示例
Jan 10 jQuery
antd配置config-overrides.js文件的操作
Oct 31 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中的cookie
2006/11/26 PHP
比较全的JS checkbox全选、取消全选、删除功能代码
2008/12/19 Javascript
基于Jquery的简单图片切换效果
2011/01/06 Javascript
终于解决了IE8不支持数组的indexOf方法
2013/04/03 Javascript
js固定DIV高度,超出部分自动添加滚动条的简单方法
2013/07/10 Javascript
浅析JavaScript中的同名标识符优先级
2013/12/06 Javascript
使用js完成节点的增删改复制等的操作
2014/01/02 Javascript
多选列表框动态添加,移动,删除,全选等操作的简单实例
2014/01/13 Javascript
IE6中链接A的href为javascript协议时不在当前页面跳转
2014/06/05 Javascript
在for循环中length值是否需要缓存
2015/07/27 Javascript
编写高性能Javascript代码的N条建议
2015/10/12 Javascript
基于JQuery实现图片上传预览与删除操作
2016/05/24 Javascript
js实现可控制左右方向的无缝滚动效果
2016/05/29 Javascript
浅谈react.js 之 批量添加与删除功能
2017/04/17 Javascript
js求数组中全部数字可拼接出的最大整数示例代码
2017/08/25 Javascript
Vue+Mock.js模拟登录和表格的增删改查功能
2018/07/26 Javascript
element-ui使用导航栏跳转路由的用法详解
2018/08/22 Javascript
JS封装的模仿qq右下角消息弹窗功能示例
2018/08/22 Javascript
谈谈React中的Render Props模式
2018/12/06 Javascript
Vue解析带html标签的字符串为dom的实例
2019/11/13 Javascript
基于jQuery实现可编辑的表格
2019/12/11 jQuery
JS变量提升原理与用法实例浅析
2020/05/22 Javascript
Python 实现数据库(SQL)更新脚本的生成方法
2017/07/09 Python
Python基于pyCUDA实现GPU加速并行计算功能入门教程
2018/06/19 Python
Linux下多个Python版本安装教程
2018/08/15 Python
对Python中class和instance以及self的用法详解
2019/06/26 Python
python 实现简易的记事本
2020/11/30 Python
介绍CSS3使用技巧5个
2009/04/02 HTML / CSS
学生喝酒检讨书
2014/02/06 职场文书
劳动竞赛活动总结
2014/05/05 职场文书
品酒会策划方案
2014/05/26 职场文书
公务员中国梦演讲稿
2014/08/19 职场文书
上课讲话检讨书范文
2015/05/07 职场文书
校长一岗双责责任书
2015/05/09 职场文书
MySQL8.0.24版本Release Note的一些改进点
2021/04/22 MySQL
HTML5之高度塌陷问题的解决
2022/06/01 HTML / CSS