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 相关文章推荐
jQuery1.6 正式版发布并提供下载
May 05 Javascript
使用jQuery Ajax功能时需要注意的一个问题(内存溢出)
May 30 Javascript
JS JSON对象转为字符串的简单实现方法
Nov 18 Javascript
浅析javascript中函数声明和函数表达式的区别
Feb 15 Javascript
javascript操作ul中li的方法
May 14 Javascript
AngularJS中如何使用$parse或$eval在运行时对Scope变量赋值
Jan 25 Javascript
微信小程序 小程序制作及动画(animation样式)详解
Jan 06 Javascript
jquery tmpl模板(实例讲解)
Sep 02 jQuery
详解React native全局变量的使用(跨组件的通信)
Sep 07 Javascript
Vue.js 动态为img的src赋值方法
Mar 14 Javascript
vue操作下拉选择器获取选择的数据的id方法
Aug 24 Javascript
详解vue 数组和对象渲染问题
Sep 21 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
一个没有MYSQL数据库支持的简易留言本的编写
2006/10/09 PHP
一个php短网址的生成代码(仿微博短网址)
2014/05/07 PHP
php生成zip文件类实例
2015/04/07 PHP
PHP编程计算日期间隔天数的方法
2017/04/26 PHP
日期 时间js控件
2009/05/07 Javascript
JS中confirm,alert,prompt函数使用区别分析
2010/04/01 Javascript
javascript 广告后加载,加载完页面再加载广告
2010/11/25 Javascript
JS之Date对象和获取系统当前时间详解
2014/01/13 Javascript
javascript页面加载完执行事件代码
2014/02/11 Javascript
使用Sticker.js实现贴纸效果
2015/01/28 Javascript
jQuery源码解读之hasClass()方法分析
2015/02/20 Javascript
JavaScript实现简单图片翻转的方法
2015/04/17 Javascript
JavaScript基础篇(3)之Object、Function等引用类型
2015/11/30 Javascript
基于angular中的重要指令详解($eval,$parse和$compile)
2016/10/21 Javascript
javascript笔记之匿名函数和闭包
2017/02/06 Javascript
纯原生js实现贪吃蛇游戏
2020/04/16 Javascript
JavaScript数组_动力节点Java学院整理
2017/06/26 Javascript
import与export在node.js中的使用详解
2017/09/28 Javascript
浅谈React中的元素、组件、实例和节点
2018/02/27 Javascript
解决Mac node版本升级失败的问题
2018/05/16 Javascript
AngularJS 前台分页实现的示例代码
2018/06/07 Javascript
微信小程序实现省市区三级地址选择
2020/06/21 Javascript
在vue项目中引用Antv G2,以饼图为例讲解
2020/10/28 Javascript
详解template标签用法(含vue中的用法总结)
2021/01/12 Vue.js
[01:06:43]完美世界DOTA2联赛PWL S3 PXG vs GXR 第二场 12.19
2020/12/24 DOTA
Python学习笔记(一)(基础入门之环境搭建)
2014/06/05 Python
在Python中使用Mako模版库的简单教程
2015/04/08 Python
pytorch forward两个参数实例
2020/01/17 Python
如何用Django处理gzip数据流
2021/01/29 Python
加拿大高尔夫超市:Golf Town
2018/01/12 全球购物
UNIX特点都有哪些
2016/04/05 面试题
《孔子拜师》教学反思
2014/02/24 职场文书
2014年维修电工工作总结
2014/11/20 职场文书
2014年卫生院工作总结
2014/12/03 职场文书
如何用python识别滑块验证码中的缺口
2021/04/01 Python
PHP获取学生成绩的方法
2021/11/17 PHP