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 相关文章推荐
Mootools 1.2教程 输入过滤第二部分(字符串)
Sep 15 Javascript
js tab效果的实现代码
Dec 26 Javascript
使用mini-define实现前端代码的模块化管理
Dec 25 Javascript
jQuery 实现侧边浮动导航菜单效果
Dec 26 Javascript
纯javascript实现图片延时加载方法
Aug 21 Javascript
jQuery 移动端artEditor富文本编辑器
Jan 11 Javascript
Vue2实现组件props双向绑定
Dec 02 Javascript
webpack独立打包和缓存处理详解
Apr 03 Javascript
angular过滤器实现排序功能
Jun 27 Javascript
es6中的解构赋值、扩展运算符和rest参数使用详解
Sep 28 Javascript
layui多图上传实现删除功能的例子
Sep 23 Javascript
vue设置默认首页的操作
Aug 12 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
Joomla下利用configuration.php存储简单数据
2010/05/19 PHP
JavaScript 捕获窗口关闭事件
2009/07/26 Javascript
XENON基于JSON变种
2010/07/27 Javascript
js实现点击注册按钮开始读秒倒计时的小例子
2013/05/11 Javascript
让JavaScript的Alert弹出框失效的方法禁止弹出警告框
2014/09/03 Javascript
node.js中使用socket.io的方法
2014/12/15 Javascript
使用javascript实现简单的选项卡切换
2015/01/09 Javascript
javascript实现连续赋值
2015/08/10 Javascript
Jquery 1.9.1源码分析系列(十二)之筛选操作
2015/12/02 Javascript
基于BootStrap Metronic开发框架经验小结【六】对话框及提示框的处理和优化
2016/05/12 Javascript
使用jquery/js获取iframe父子级、同级获取元素的方法
2016/08/05 Javascript
js图片上传前预览功能(兼容所有浏览器)
2016/08/24 Javascript
原生JS取代一些JQuery方法的简单实现
2016/09/20 Javascript
form+iframe解决跨域上传文件的方法
2016/11/18 Javascript
微信小程序之ES6与事项助手的功能实现
2016/11/30 Javascript
NodeJS实现微信公众号关注后自动回复功能
2017/05/31 NodeJs
nodeJS进程管理器pm2的使用
2019/01/09 NodeJs
微信小程序实现人脸识别登陆的示例代码
2019/04/02 Javascript
Vue Object.defineProperty及ProxyVue实现双向数据绑定
2020/09/02 Javascript
[01:02:26]DOTA2-DPC中国联赛 正赛 SAG vs RNG BO3 第二场 1月18日
2021/03/11 DOTA
python时间整形转标准格式的示例分享
2014/02/14 Python
对Python中gensim库word2vec的使用详解
2018/05/08 Python
公认8个效率最高的爬虫框架
2020/07/28 Python
Python限制内存和CPU使用量的方法(Unix系统适用)
2020/08/04 Python
scrapy头部修改的方法详解
2020/12/06 Python
实现向右循环移位
2014/07/31 面试题
商业融资计划书
2014/04/29 职场文书
汽车检测与维修专业求职信
2014/07/04 职场文书
2014年教师教学工作总结
2014/11/08 职场文书
2014年协会工作总结
2014/11/22 职场文书
电力工程合作意向书
2015/05/11 职场文书
数据库的高级查询六:表连接查询:外连接(左外连接,右外连接,UNION关键字,连接中ON与WHERE的不同)
2021/04/05 MySQL
MySQL 重写查询语句的三种策略
2021/05/10 MySQL
SpringBoot SpringEL表达式的使用
2021/07/25 Java/Android
详解OpenCV获取高动态范围(HDR)成像
2022/04/29 Python
java版 联机五子棋游戏
2022/05/04 Java/Android