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 相关文章推荐
javascript编程起步(第六课)
Feb 27 Javascript
javascript 触发HTML元素绑定的函数
Sep 11 Javascript
IFrame跨域高度自适应实现代码
Aug 16 Javascript
php析构函数的具体用法小结
Mar 11 Javascript
详谈JavaScript内存泄漏
Nov 14 Javascript
大型JavaScript应用程序架构设计模式
Jun 29 Javascript
BootStrap3中模态对话框的使用
Jan 06 Javascript
AngularJs上传前预览图片的实例代码
Jan 20 Javascript
jQuery实现的鼠标拖动浮层功能示例【拖动div等任何标签】
Dec 29 jQuery
详解vue-cli3 中跨域解决方案
Apr 10 Javascript
JS函数动态传递参数的方法分析【基于arguments对象】
Jun 05 Javascript
JS开发 富文本编辑器TinyMCE详解
Jul 19 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新手上路(四)
2006/10/09 PHP
thinkPHP5框架实现基于ajax的分页功能示例
2018/06/12 PHP
Yii2框架实现登陆添加验证码功能示例
2018/07/12 PHP
Alliance vs Liquid BO3 第二场2.13
2021/03/10 DOTA
一直复略了的一个问题,关于表单重复提交
2007/02/15 Javascript
在IE上直接编辑网页内容的js代码(IE地址栏js)
2009/04/27 Javascript
jquery 学习之二 属性 文本与值(text,val)
2010/11/25 Javascript
浅谈jQuery中 wrap() wrapAll() 与 wrapInner()的差异
2014/11/12 Javascript
javascript生成不重复的随机数
2015/07/17 Javascript
javascript中不易分清的slice,splice和split三个函数
2016/03/29 Javascript
jquery输入数字随机抽奖特效的简单实现代码
2016/06/10 Javascript
javascript中json对象json数组json字符串互转及取值方法
2017/04/19 Javascript
JS二分查找算法详解
2017/11/01 Javascript
使用Angular CLI从蓝本生成代码详解
2018/03/24 Javascript
JavaScript设计模式之观察者模式实例详解
2019/01/16 Javascript
javascript中join方法实例讲解
2019/02/21 Javascript
JavaScript中this用法学习笔记
2019/03/17 Javascript
JavaScript函数式编程(Functional Programming)组合函数(Composition)用法分析
2019/05/22 Javascript
微信小程序里引入SVG矢量图标的方法
2019/09/20 Javascript
vue 解决异步数据更新问题
2019/10/29 Javascript
JavaScript实现矩形块大小任意缩放
2020/08/25 Javascript
JS如何调用WebAssembly编译出来的.wasm文件
2020/11/05 Javascript
Python和perl实现批量对目录下电子书文件重命名的代码分享
2014/11/21 Python
详解django中使用定时任务的方法
2018/09/27 Python
python生成器与迭代器详解
2019/01/01 Python
Django如何开发简单的查询接口详解
2019/05/17 Python
使用Python做垃圾分类的原理及实例代码附源码
2019/07/02 Python
Python定时器线程池原理详解
2020/02/26 Python
如何使用python切换hosts文件
2020/04/29 Python
opencv 图像腐蚀和图像膨胀的实现
2020/07/07 Python
HTML5文档结构标签
2017/04/21 HTML / CSS
什么是跨站脚本攻击
2014/12/11 面试题
医药销售自我评价200字
2014/09/11 职场文书
2014年学校领导班子对照检查材料
2014/09/19 职场文书
个人工作表现自我评价
2015/03/06 职场文书
消防演习感想
2015/08/10 职场文书