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团队打造的javascript单元测试工具QUnit介绍
Feb 26 Javascript
javascript的数据类型、字面量、变量介绍
May 23 Javascript
js实现圆盘记速表
Aug 03 Javascript
javascript实现的登陆遮罩效果汇总
Nov 09 Javascript
jquery基础知识第一讲之认识jquery
Mar 17 Javascript
jquery 属性选择器(匹配具有指定属性的元素)
Sep 06 Javascript
vue实现todolist单页面应用
Apr 11 Javascript
Vue.js框架路由使用方法实例详解
Aug 25 Javascript
vue项目中使用axios上传图片等文件操作
Nov 02 Javascript
对vue中v-if的常见使用方法详解
Sep 28 Javascript
vue 封装 Adminlte3组件的实现
Mar 18 Javascript
vue3引入highlight.js进行代码高亮的方法实例
Apr 08 Vue.js
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 callback函数使用方法和注意事项
2015/01/23 PHP
浅谈使用PHP开发微信支付的流程
2015/10/04 PHP
阿里云Win2016安装Apache和PHP环境图文教程
2018/03/11 PHP
Laravel中如何轻松容易的输出完整的SQL语句
2020/07/26 PHP
解放web程序员的输入验证
2006/10/06 Javascript
推荐:极酷右键菜单
2006/11/29 Javascript
javascript整除实现代码
2010/11/23 Javascript
ejs v9 javascript模板系统
2012/03/21 Javascript
js内存泄露的几种情况详细探讨
2013/05/31 Javascript
javascript 3d 逐侦产品展示(核心精简)
2014/03/26 Javascript
javascript实现鼠标拖动改变层大小的方法
2015/04/30 Javascript
jQuery实现的经典竖向伸缩菜单效果代码
2015/09/24 Javascript
JS判断字符串变量是否含有某个字串的实现方法
2016/06/03 Javascript
jQuery插件实现文件上传功能(支持拖拽)
2020/08/27 Javascript
jQuery实现点击后高亮背景固定显示的菜单效果【附demo源码下载】
2016/09/21 Javascript
Angularjs实现搜索关键字高亮显示效果
2017/01/17 Javascript
原生JS实现的碰撞检测功能示例
2018/05/18 Javascript
微信小程序 自定义弹窗实现过程(附代码)
2019/12/05 Javascript
详解vue实现坐标拾取器功能示例
2020/11/18 Vue.js
简单了解python的break、continue、pass
2019/07/08 Python
python3 实现爬取TOP500的音乐信息并存储到mongoDB数据库中
2019/08/24 Python
简单易懂Pytorch实战实例VGG深度网络
2019/08/27 Python
解决Pycharm 包已经下载,但是运行代码提示找不到模块的问题
2019/08/31 Python
python实现感知机模型的示例
2020/09/30 Python
ffmpeg+Python实现B站MP4格式音频与视频的合并示例代码
2020/10/21 Python
使用PyCharm官方中文语言包汉化PyCharm
2020/11/18 Python
python3.9.1环境安装的方法(图文)
2021/02/02 Python
基于css3的属性transition制作菜单导航效果
2015/09/01 HTML / CSS
市场营销专业推荐信
2013/11/03 职场文书
电脑教师的教学自我评价
2013/11/26 职场文书
什么是就业协议书
2014/04/17 职场文书
8和9的加减法教学反思
2014/05/01 职场文书
电子商务专业毕业生求职信
2014/06/12 职场文书
城市规划应届生推荐信
2014/09/08 职场文书
一年之计:2019年下半年的计划
2019/05/07 职场文书
假期读书倡议书3篇
2019/08/19 职场文书