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函数
Nov 20 Javascript
CSS+Table图文混排中实现文本自适应图片宽度(超简单+跨所有浏览器)
Feb 14 Javascript
InnerHtml和InnerText的区别分析
Mar 13 Javascript
JavaScript setTimeout和setInterval的使用方法 说明
Mar 25 Javascript
node.js chat程序如何实现Ajax long-polling长链接刷新模式
Mar 13 Javascript
Javascript中自动切换焦点实现代码
Dec 15 Javascript
js去除重复字符串两种实现方法
Jan 09 Javascript
JavaScript中的Number数字类型学习笔记
May 26 Javascript
jQuery文字提示与图片提示效果实现方法
Jul 04 Javascript
Nuxt.js实现校验访问浏览器类型的中间件
Aug 24 Javascript
基于JavaScript判断两个对象内容是否相等
Jan 10 Javascript
JavaScript实现网页留言板功能
Nov 23 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版微信公众平台红包API
2015/04/02 PHP
php 在字符串指定位置插入新字符的简单实现
2016/06/28 PHP
使用PHP+Redis实现延迟任务,实现自动取消订单功能
2019/11/21 PHP
php实现将数组或对象写入到文件的方法小结【三种方法】
2020/04/22 PHP
javascript 自定义事件初探
2009/08/21 Javascript
js自动下载文件到本地的实现代码
2013/04/28 Javascript
js实现进度条的方法
2015/02/13 Javascript
AngularJs自定义服务之实现签名和加密
2016/08/02 Javascript
js实现无缝循环滚动
2020/06/23 Javascript
JS实现的驼峰式和连字符式转换功能分析
2016/12/21 Javascript
jQuery电话号码验证实例
2017/01/05 Javascript
浅谈Vue SSR 的 Cookies 问题
2017/11/20 Javascript
vue项目国际化vue-i18n的安装使用教程
2018/03/14 Javascript
vue使用laydate时间插件的方法
2018/11/14 Javascript
vue设计一个倒计时秒杀的组件详解
2019/04/06 Javascript
vue element-ui table组件动态生成表头和数据并修改单元格格式 父子组件通信
2019/08/15 Javascript
微信浏览器左上角返回按钮监听的实现
2020/03/04 Javascript
[49:35]LGD vs OG 2018国际邀请赛淘汰赛BO3 第二场 8.25
2018/08/29 DOTA
Python3中的真除和Floor除法用法分析
2016/03/16 Python
Python简单检测文本类型的2种方法【基于文件头及cchardet库】
2016/09/18 Python
python中Matplotlib实现绘制3D图的示例代码
2017/09/04 Python
python编程使用协程并发的优缺点
2018/09/20 Python
python 设置xlabel,ylabel 坐标轴字体大小,字体类型
2019/07/23 Python
pyqt5 QScrollArea设置在自定义侧(任何位置)
2019/09/25 Python
Django celery异步任务实现代码示例
2020/11/26 Python
Origins加拿大官网:雅诗兰黛集团高端植物护肤品牌
2017/11/19 全球购物
火车的故事教学反思
2014/02/11 职场文书
毕业自我鉴定书
2014/03/24 职场文书
企业安全生产责任书
2014/04/14 职场文书
《灰椋鸟》教学反思
2014/04/27 职场文书
感恩祖国演讲稿
2014/09/09 职场文书
会议开幕词
2015/01/28 职场文书
教师学期末个人总结
2015/02/13 职场文书
英语教师求职信范文
2015/03/20 职场文书
倡议书格式及范文
2015/04/29 职场文书
写一个Python脚本下载哔哩哔哩舞蹈区的所有视频
2021/05/31 Python