Vue2.x中的父子组件相互通信的实现方法


Posted in Javascript onMay 02, 2017

业务场景:(这里指的是直接父子级关系的通信)

  • 美女(子组件)将消息发送给大群(父组件)
  • 大群(父组件)收到美女发送的消息后再回个信息给美女(子组件)

父组件

template

<template>
  <div>
    <p>群消息girl:</p>
    <div>
      {{ somebody }} 说: 我 {{ age }} 了。
    </div>
    <hr>
    <v-girl-group 
        :girls="aGirls" 
        :noticeGirl="noticeGirl"
        @introduce="introduceSelf"></v-girl-group>
  </div>
</template>

注意的点:

  • 这里在父组件使用v-on来监听子组件上的自定义事件($emit的变化),一旦发生变化noticeGirl方法就会触发
<script>
import vGirlGroup from './GirlGroup'
export default {
  name: 'girl',
  components: {
    vGirlGroup
  },
  data () {
    return {
      aGirls:[{
        name:'小丽',
        age:22
      },{
        name:'小美',
        age:21
      },{
        name:'小荷',
        age:24
      }],
      somebody:'',
      age:'',
      noticeGirl:''
    }
  },
  methods: {
    introduceSelf (opt) {
      this.somebody = opt.name;
      this.age = opt.age;
      // 通知girl收到消息
      this.noticeGirl = opt.name + ',已收到消息';
    }
  }
}
</script>

注意的点:

这里methods中定义的方法introduceSelf就是父组件接收到子组件发出的$emit的事件处理程序

子组件

template

<template>
  <div>
    <ul>
      <li v-for="(value, index) in girls">
        {{ index }} - {{ value.name }} - {{ value.age }} 
        <button @click="noticeGroup(value.name,value.age)">发送消息</button>
      </li> 
    </ul>
    <div>接收来自大群的消息:{{ noticeGirl }}</div>
  </div>
</template>

script

<script>
export default {
  name: 'girl-group',
  props: {
    girls: {
      type: Array,
      required: true
    },
    noticeGirl: {
      type: String,
      required: false
    }
  },
  methods: {
    noticeGroup (name, age) {
      this.$emit('introduce',{
        name: name,
        age: age
      })
    }
  }
}
</script>

注意的点:

子组件使用$emit发出自定义事件

相比于Vue1.x的变化:

$dispatch 和 $broadcast 已经被弃用

*官方推荐的通信方式

首选使用Vuex

使用事件总线:eventBus,允许组件自由交流

具体可见:https://cn.vuejs.org/v2/guide/migration.html#dispatch-和-broadcast-替换

结果

Vue2.x中的父子组件相互通信的实现方法

Vue2.x中的父子组件相互通信的实现方法

Vue2.x中的父子组件相互通信的实现方法

以上所述是小编给大家介绍的Vue2.x中的父子组件相互通信,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
网易JS面试题与Javascript词法作用域说明
Nov 09 Javascript
一款jquery特效编写的大度宽屏焦点图切换特效的实例代码
Aug 05 Javascript
js 事件截取enter按键页面提交事件示例代码
Mar 04 Javascript
Jquery的each里用return true或false代替break或continue
May 21 Javascript
jQuery中:input选择器用法实例
Jan 03 Javascript
Underscore.js 1.3.3 中文注释翻译说明
Jun 25 Javascript
JavaScript保存并运算页面中数字类型变量的写法
Jul 06 Javascript
简单的渐变轮播插件
Jan 12 Javascript
vue项目中添加单元测试的方法
Jul 21 Javascript
微信小程序车牌号码模拟键盘输入功能的实现代码
Nov 11 Javascript
详解前端任务构建利器Gulp.js使用指南
Apr 30 Javascript
JS前端使用canvas实现物体的点选示例
Aug 05 Javascript
详解webpack 配合babel 将es6转成es5 超简单实例
May 02 #Javascript
jQuery树插件zTree使用方法详解
May 02 #jQuery
JavaScript数据结构学习之数组、栈与队列
May 02 #Javascript
js-FCC算法-No repeats please字符串的全排列(详解)
May 02 #Javascript
详解webpack+es6+angular1.x项目构建
May 02 #Javascript
jQuery Tree Multiselect使用详解
May 02 #jQuery
bootstrap的常用组件和栅格式布局详解
May 02 #Javascript
You might like
Zend引擎的发展 [15]
2006/10/09 PHP
一个PHP操作Access类(PHP+ODBC+Access)
2007/01/02 PHP
生成卡号php代码
2008/04/09 PHP
php 目录与文件处理-郑阿奇(续)
2011/07/04 PHP
探讨如何在php168_cms中提取验证码
2013/06/08 PHP
CentOS 6.3下安装PHP xcache扩展模块笔记
2014/09/10 PHP
PHP中使用匿名函数操作数据库的例子
2014/11/17 PHP
PHP 5.3和PHP 5.4出现FastCGI Error解决方法
2015/02/12 PHP
ThinkPHP在Cli模式下使用模板引擎的方法
2015/09/25 PHP
Javascript表达式中连续的 &amp;&amp; 和 || 之赋值区别
2010/10/17 Javascript
浅析JQuery获取和设置Select选项的常用方法总结
2013/07/04 Javascript
php的文件上传入门教程(实例讲解)
2014/04/10 Javascript
JavaScript 常见安全漏洞和自动化检测技术
2015/08/21 Javascript
深入理解JavaScript单体内置对象
2016/06/06 Javascript
input file上传 图片预览功能实例代码
2016/10/25 Javascript
微信开发之调起摄像头、本地展示图片、上传下载图片实例
2016/12/08 Javascript
原生js实现返回顶部缓冲效果
2017/01/18 Javascript
select下拉框插件jquery.editable-select详解
2017/01/22 Javascript
JS获得一个对象的所有属性和方法实例
2017/02/21 Javascript
VUE元素的隐藏和显示(v-show指令)
2017/06/23 Javascript
vue 项目接口管理的实现
2019/01/17 Javascript
深入浅析vue中cross-env的使用
2019/09/12 Javascript
使用 Angular RouteReuseStrategy 缓存(路由)组件的实例代码
2019/11/01 Javascript
Python程序退出方式小结
2017/12/09 Python
浅谈用VSCode写python的正确姿势
2017/12/16 Python
python Jupyter运行时间实例过程解析
2019/12/13 Python
已安装tensorflow-gpu,但keras无法使用GPU加速的解决
2020/02/07 Python
CSS3对背景图片的裁剪及尺寸和位置的设定方法
2016/03/07 HTML / CSS
万得城电器土耳其网站:欧洲第一大电子产品零售商
2016/10/07 全球购物
英国领先的电子、技术和办公用品购物网站:Ebuyer
2018/04/04 全球购物
有影响力的人、名人和艺术家的官方商品:Represent
2019/11/26 全球购物
什么是Linux虚拟文件系统VFS
2012/01/31 面试题
广告学专业毕业生自荐信
2014/05/28 职场文书
在宿舍喝酒的检讨书
2014/09/28 职场文书
2015年思想品德教学工作总结
2015/07/22 职场文书
Spring Data JPA使用JPQL与原生SQL进行查询的操作
2021/06/15 Java/Android