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中数组的多种定义方法和常用函数简介
May 09 Javascript
详解JS中的快速排序与冒泡
Jan 10 Javascript
JS百度地图搜索悬浮窗功能
Jan 12 Javascript
JavaScript-定时器0~9抽奖系统详解(代码)
Aug 16 Javascript
谈谈JS中的!!
Dec 07 Javascript
在Vue项目中引入腾讯验证码服务的教程
Apr 03 Javascript
详解基于Vue,Nginx的前后端不分离部署教程
Dec 04 Javascript
微信小程序配置服务器提示验证token失败的解决方法
Apr 03 Javascript
vue css 引入asstes中的图片无法显示的四种解决方法
Mar 16 Javascript
element跨分页操作选择详解
Jun 29 Javascript
80行代码写一个Webpack插件并发布到npm
May 24 Javascript
vue中data里面的数据相互使用方式
Jun 05 Vue.js
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 parse_ini_file函数的应用与扩展操作示例
2019/01/07 PHP
可以文本显示的公告栏的js代码
2007/03/11 Javascript
javascript[js]获取url参数的代码
2007/10/17 Javascript
JavaScript入门教程(9) Document文档对象
2009/01/31 Javascript
jQuery(1.6.3) 中css方法对浮动的实现缺陷分析
2011/09/09 Javascript
js 延迟加载 改变JS的位置加快网页加载速度
2012/12/11 Javascript
JS 如何获取radio选中后的值及不选择取radio的值
2013/10/28 Javascript
JS获取html对象的几种方式介绍
2013/12/05 Javascript
兼容所有浏览器的js复制插件Zero使用介绍
2014/03/19 Javascript
Javascript 浮点运算精度问题分析与解决
2014/03/26 Javascript
Node.js中使用计时器定时执行函数详解
2014/08/15 Javascript
jQuery中on()方法用法实例
2015/01/19 Javascript
微信小程序 后台登录(非微信账号)实例详解
2017/03/31 Javascript
Angular4 ElementRef的应用
2018/02/26 Javascript
解决vue-quill-editor上传内容由于图片是base64的导致字符太长的问题
2018/08/20 Javascript
彻底弄懂 JavaScript 执行机制
2018/10/23 Javascript
Vue项目安装插件并保存
2019/01/28 Javascript
微信小程序拼接图片链接无底洞深入探究
2019/09/03 Javascript
微信小程序自定义底部弹出框功能
2020/11/18 Javascript
vue中封装axios并实现api接口的统一管理
2020/12/25 Vue.js
python 3.5下xadmin的使用及修复源码bug
2017/05/10 Python
Python列表list解析操作示例【整数操作、字符操作、矩阵操作】
2017/07/25 Python
Python中使用haystack实现django全文检索搜索引擎功能
2017/08/26 Python
Django框架使用富文本编辑器Uedit的方法分析
2018/07/31 Python
Python使用线程来接收串口数据的示例
2019/07/02 Python
Python手绘可视化工具cutecharts使用实例
2019/12/05 Python
python shell命令行中import多层目录下的模块操作
2020/03/09 Python
Python多线程的退出控制实现
2020/08/10 Python
python selenium xpath定位操作
2020/09/01 Python
利用canvas实现图片压缩的示例代码
2018/07/17 HTML / CSS
Tostadora意大利:定制T恤
2019/04/08 全球购物
2014年物业公司工作总结
2014/11/22 职场文书
2016毕业实习单位评语大全
2015/12/01 职场文书
写给消防战士们的一封慰问信
2019/10/07 职场文书
25句企业管理语录:助你迅速打开思路,句句经典!
2020/01/14 职场文书
python百行代码实现汉服圈图片爬取
2021/11/23 Python