vue中组件通信详解(父子组件, 爷孙组件, 兄弟组件)


Posted in Javascript onJuly 27, 2020

vue中我们常常用到组件. 那么组件总体可以分为如下的几种关系.

父子组件, 爷孙组件, 兄弟组件. 这几种组件之间是如何通信的呢?

父子组件通信

根据vue中的文档可知, 组件的props属性用于接收父组件传递的信息. 而子组件想要向父组件传递信息, 可以使用$emit事件.

我们定义两个组件, 一个为父组件名为father, 另外一个为子组件child. 子组件通过props属性接收父组件传递的值, 这个值为fname, 是父组件的名字. 点击子组件的按钮, 触发toFather事件, 向父组件传递消息. 父组件做出相应的反应.

将父组件和子组件放入名为app的vue实例中

Vue.component('child', {
 props: ['fname'],
 template: `
  <div class="child">
   这是儿子, 我爸爸是{{fname}}
   <button @click="$emit('toFather')">点我通知爸爸</button>
  </div>
 `
})

Vue.component('father', {
 data() {
  return {
   info: '无消息'
  }
 },
 template: `
  <div class="father">
   这是父亲, {{info}}
   <child fname="father" @toFather="getSonMsg"></child>
  </div>
 `,
 methods: {
  getSonMsg() {
   this.info = '我收到儿子传来的消息了'
  }
 }
})
new Vue({
 el: '#app',
})

注意上面的组件定义顺序不能换

让后我们在html文件中写入即可

<div id="app">
  <father></father>
 </div>

vue中组件通信详解(父子组件, 爷孙组件, 兄弟组件)

点击按钮后发现我们的父组件发生了变化

vue中组件通信详解(父子组件, 爷孙组件, 兄弟组件)

点击这里可以查看效果

爷孙组件通信

因为vue只是说明了父子组件如何通信, 那么爷孙组件是没有办法直接通信的. 但是它们可以分解为两个父子组件通信.

即爷爷和父亲看成是一个父子组件, 而父亲和孙子看成是一个父子组件. 这样它们之间就可以进行通信了. 通过父亲组件合格桥梁, 可以实现爷孙的通信. (注意: 爷孙组件是无法直接通信的)

兄弟组件通信

兄弟组件通信即组件之间通信. 这就要用到观察者模式了. 因为vue实例的原型全部来自Vue.prototype. 那么我们就可以了将事件中心绑定到Vue.prototype的某个属性上, 暂且叫它为bus吧.

let bus = new Vue()

Vue.prototype.bus = bus

我们再定义两个组件, up组件和down组件, 当点击down组件中的按钮时, 会给up组件传递信息.

Vue.component('up', {
 data() {
  return {
   msg: '未传递消息'
  }
 },
 template: `
  <div class="up">
   <p>这是up组件, 下一行为down传递的消息</p>
   <p>{{msg}}</p>
  </div>
 `,
 mounted() {
  this.bus.$on('send', (msg)=> {
   this.msg = (msg)
  })
 }
})

Vue.component('down', {
 template: `
  <div class="down">
   <p>这是down</p>
   <button @click="toUp">点击我向up组件传递消息</button>
  </div>
 `,
 methods: {
  toUp() {
   this.bus.$emit('send', 'down来消息了')
  }
 }
})
new Vue({
 el: '#app',
})

并且将两个组件放入名为app的实例中

<div id="app">
  <up></up>
  <down></down>
 </div>

vue中组件通信详解(父子组件, 爷孙组件, 兄弟组件)

按钮被点击后, up组件会接收到消息

vue中组件通信详解(父子组件, 爷孙组件, 兄弟组件)

点击这里查看源代码

以上这篇vue中组件通信详解(父子组件, 爷孙组件, 兄弟组件)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JS 获取滚动条高度示例代码
Oct 24 Javascript
jQuery取id有.的值的方法
May 21 Javascript
JavaScript删除指定子元素代码实例
Jan 13 Javascript
jQuery统计指定子元素数量的方法
Mar 17 Javascript
JavaScript实现点击单元格改变背景色的方法
Feb 12 Javascript
微信小程序 向左滑动删除功能的实现
Mar 10 Javascript
AngularJS 验证码60秒倒计时功能的实现
Jun 05 Javascript
jQuery 表单序列化实例代码
Jun 11 jQuery
AngularJS点击添加样式、点击变色设置的实例代码
Jul 27 Javascript
node中使用es6/7/8(支持性与性能)
Mar 28 Javascript
bootstrap-table后端分页功能完整实例
Jun 01 Javascript
vue axios封装httpjs,接口公用配置拦截操作
Aug 11 Javascript
JS的时间格式化和时间戳转换函数示例详解
Jul 27 #Javascript
vue双击事件2.0事件监听(点击-双击-鼠标事件)和事件修饰符操作
Jul 27 #Javascript
vue键盘事件点击事件加native操作
Jul 27 #Javascript
Element Cascader 级联选择器的使用示例
Jul 27 #Javascript
vue 通过绑定事件获取当前行的id操作
Jul 27 #Javascript
Element Rate 评分的使用方法
Jul 27 #Javascript
Element InputNumber计数器的使用方法
Jul 27 #Javascript
You might like
PHP原生模板引擎 最简单的模板引擎
2012/04/25 PHP
PHP中使用CURL模拟登录并获取数据实例
2014/07/01 PHP
学习php设计模式 php实现工厂模式(factory)
2015/12/07 PHP
thinkphp框架表单数组实现图片批量上传功能示例
2020/04/04 PHP
又一个图片自动缩小的JS代码
2007/03/10 Javascript
javascript结合html5 canvas实现(可调画笔颜色/粗细/橡皮)的涂鸦板
2013/04/27 Javascript
在Linux上用forever实现Node.js项目自启动
2014/07/09 Javascript
js根据鼠标移动速度背景图片自动旋转的方法
2015/02/28 Javascript
浅谈几种常用的JS类定义方法
2016/06/08 Javascript
Bootstrap编写一个兼容主流浏览器的受众门户式风格页面
2016/07/01 Javascript
jQuery Easyui快速入门教程
2016/08/21 Javascript
BootStrap tooltip提示框使用小结
2016/10/26 Javascript
jQuery的ajax中使用FormData实现页面无刷新上传功能
2017/01/16 Javascript
Vue.js中轻松解决v-for执行出错的三个方案
2017/06/09 Javascript
Vue+Element-UI实现上传图片并压缩
2019/11/26 Javascript
在vue和element-ui的table中实现分页复选功能
2019/12/04 Javascript
vue实现计算器功能
2020/02/22 Javascript
[00:10]神之谴戒
2019/03/06 DOTA
Python文件操作类操作实例详解
2014/07/11 Python
python3基于OpenCV实现证件照背景替换
2018/07/18 Python
python 3.6.2 安装配置方法图文教程
2018/09/18 Python
flask 实现上传图片并缩放作为头像的例子
2020/01/09 Python
Python根据URL地址下载文件并保存至对应目录的实现
2020/11/15 Python
Canvas 文本填充线性渐变的使用详解
2020/06/22 HTML / CSS
美国在线印刷公司:PsPrint
2017/10/12 全球购物
澳大利亚拥有最佳跳伞降落点和最好服务的跳伞项目运营商:Skydive Australia
2018/03/05 全球购物
C#如何判断当前用户是否输入某个域
2015/12/07 面试题
考博自荐信
2013/10/25 职场文书
爱我中华教学反思
2014/04/28 职场文书
关于环保的建议书
2014/05/12 职场文书
文化建设工作方案
2014/05/12 职场文书
公司感恩节活动策划书
2014/10/11 职场文书
机关单位工作失职检讨书
2014/11/20 职场文书
入党宣誓大会后的感想
2015/08/10 职场文书
2016大学生求职自荐信范文
2016/01/28 职场文书
Java中多线程下载图片并压缩能提高效率吗
2021/07/01 Java/Android