背景
什么是组件通信
![](https://img.haomeiwen.com/i27493437/290f7da881a9d97c.png)
组件之间的关系
![](https://img.haomeiwen.com/i27493437/43be95da6f7b7a1d.png)
组件通信解决方案
![](https://img.haomeiwen.com/i27493437/2aae6d817b906159.png)
概述
- 父子组件通讯
- props详解
- 非父子通信(拓展)- event bus 事件总线
- 非父子通信(拓展)- provide和inject
- v-model详解
- sync修饰符
- ref和$refs获取dom和组件
- Vue异步更新和$nextTick
一、父子通信
![](https://img.haomeiwen.com/i27493437/4b4bdeb2d410aae4.png)
1.1. 父 -> 子
![](https://img.haomeiwen.com/i27493437/dea7ba742608be61.png)
1.2. 子 -> 父
![](https://img.haomeiwen.com/i27493437/851e3e2aebec3c19.png)
二、props详解
2.1. 什么是props
Props定义:组件上 注册的一些自定义属性
Props作用:向子组件传递数据
特点:
- 可以传递任意数量的prop
- 可以传递 任意类型的prop
- 不可修改
2.2. props校验
![](https://img.haomeiwen.com/i27493437/6a1636085e75f3cd.png)
三、非父子通信(拓展)- event bus 事件总线
![](https://img.haomeiwen.com/i27493437/ba1595b261f562ee.png)
注意:事件总线使用完,记得使用
Bus.$off('sendMsg')
销毁事件总线,一般放在beforeDestroy
生命周期函数中
四、非父子通信(拓展)- provide & inject
![](https://img.haomeiwen.com/i27493437/ea41615c78a82f32.png)
![](https://img.haomeiwen.com/i27493437/354851ebc48b865d.png)
五、v-model原理
![](https://img.haomeiwen.com/i27493437/1ca65debb8141c17.png)
5.1. 表单类组件封装
![](https://img.haomeiwen.com/i27493437/0f5f2b523a1c51d4.png)
5.2. v-model 简化代码
原理:
v-model
本质上是一个语法糖,就是value属性
和input事件
的合写。
父组件默认绑定的是input
事件,所以子组件只有触发this.$emit('input')
才能同步更新v-model
绑定值
![](https://img.haomeiwen.com/i27493437/bb97bd506ad16638.png)
六、.sync 修饰符
![](https://img.haomeiwen.com/i27493437/c6974a347dabd4ab.png)
七、ref 和 $refs
7.1. 获取dom(组件内更精确)
![](https://img.haomeiwen.com/i27493437/91134cbde5a2fedb.png)
7.2. querySelector(查找整个页面)
![](https://img.haomeiwen.com/i27493437/a0f1e550ef4e27b6.png)
7.3. 获取组件实例
![](https://img.haomeiwen.com/i27493437/d42da683a618062e.png)
八、Vue异步更新和$nextTick、
![](https://img.haomeiwen.com/i27493437/e93e4f2ddb59eb8b.png)
![](https://img.haomeiwen.com/i27493437/fa24c2e23f366f7c.png)
8.1. 总结
![](https://img.haomeiwen.com/i27493437/491e15b7e6f660a3.png)
网友评论