组件通信和keep-alive的理解

本文详细介绍了Vue.js中各种组件间的通信方式,包括父传子、子传父、兄弟组件间通信、.sync伪数据双向绑定等,并深入探讨了动态组件、缓存组件及插槽的使用方法。

组件通信

  1. 父传子:父组件给子组件绑定一个属性,子组件使用props接收

  2. 子传父:父组件给子组件绑定一个事件,子组件使用$emit去调用事件函数

  3. 兄弟:所有的子组件通过同一个父组件进行数据的交换

  4. .sync 伪数据双向绑定 属性修饰符,子组件使用固定语法调用this.$emit('update:xx',val)

  5. v-model 数据双向绑定 会向子组件注入一个value属性和input事件

  6. $root 获取根实例对象 $parent获取直接父组件实例对象 $children直接子组件实例集合 $refs获取子组件实例对象

  7. eventBus 中央事件池,基于new了一个vue实例对象

  8. 高级用法

  • $attrs 向后代传递除了样式之外的所有属性

  • $listeners 向后代传递函数

  1. 大型的数据共享:vuex

内置组件

component 动态加载组件-动态组件

  1. 这个组件必须要有一个is属性,用来加载对应的组件名称

  2. 为了满足需要大量手写自定义组件的场景,实现tab选项卡。

keep-alive 缓存组件-缓存组件的状态

  1. 把组件的所有被改变的状态都会存储起来。

  2. 组件属性:exclude 把不想被缓存的组件名字写入,该组件就不会被缓存了

  3. 组件属性:include 只缓存被包含的组件,其他不写入的组件名字的组件则不会被缓存

slot 插槽

  1. 匿名插槽,无论组件的内部被插入任何内容,都会被slot标签接收,常用于纯静态的可复用的dom结构中

  2. 具名插槽,父组件使用template标签使用v-slot:name 加名字,插槽组件使用slot标签的name属性接收

  3. 作用域插槽,父组件在template标签使用v-slot:name='接收值' 子组件在slot标签上绑定属性传参

<think> 我们正在讨论USB的KEEP-Alive机制及其使用的包。根据引用[1]的内容,我们知道: - 低速信道上,主机按照1ms的周期发送Keep Alive (End of Packet) 信号。 - 这个机制是为了防止低速设备进入挂起模式(Suspend)。 但是,引用[1]中并没有详细描述KEEP-Alive包的具体结构。因此,我们需要结合USB协议的知识来补充。 在USB协议中,KEEP-Alive信号实际上并不是一个完整的数据包,而是一个特定的信号(End of Packet,EOP)。它用于在低速设备上维持总线活动,防止设备进入挂起状态。 具体来说: 1. **KEEP-Alive的作用**:当总线空闲时,如果超过3ms没有活动,设备就会进入挂起状态。为了避免低速设备进入挂起,主机每隔1ms发送一个KEEP-Alive信号(实际上是一个EOP信号),这样总线就不会连续3ms空闲。 2. **KEEP-Alive的实现形式**:在USB协议中,KEEP-Alive信号是通过发送一个End of Packet(EOP)来实现的。EOP是USB物理层的一个信号,它由两个位的时间(全速高速下)或更长的低速EOP(具体为低速设备使用)组成。对于低速设备,EOP信号由一个单端0(SE0)状态持续两个位时间,然后紧跟一个位时间的J状态(对于低速,J状态是差分0)组成。但注意,KEEP-Alive只是发送一个EOP,并不伴随任何数据包。 因此,严格来说,KEEP-Alive并不是一个数据包,而是一个物理层的信号。它不包含同步字段、PID、数据等,仅仅是一个EOP信号。 为了更全面,我们还需要注意: - 在低速设备通信中,当主机要与低速设备通信时,会先发送一个PRE包(前导包),这是一个全速包,通知集线器接下来是低速通信。然后主机发送低速包(包括令牌包、数据包等),每个包都以EOP结束。而KEEP-Alive信号就是单独发送的一个EOP,它没有前面的同步字段PID等,因此不是一个完整的包。 所以,总结如下: - **KEEP-Alive机制**:主机每隔1ms向低速设备发送一个EOP信号(即KEEP-Alive信号),以防止设备进入挂起状态。 - **使用的包**:实际上,KEEP-Alive并非使用一个完整的USB包,而仅仅是一个EOP信号。因此,它没有包结构,只是物理层的一个特定信号。 引用[1]中提到的是“Keep Alive (End of Packet)”,这印证了KEEP-Alive就是EOP信号。 另外,注意在引用[2]中描述了USB设备的供电方式,但与KEEP-Alive机制无关。引用[3]是关于Vuekeep-alive组件,与USB无关,忽略。 因此,回答如下: </think>### USB KEEP-Alive机制及使用的包详解 #### 1. **KEEP-Alive机制的核心作用** - **防挂起功能**:当USB总线连续$3ms$无活动时,设备会自动进入**挂起模式(Suspend Mode)** 以降低功耗。KEEP-Alive机制通过周期性地发送特定信号,维持总线活动状态,防止低速设备进入挂起模式[^1]。 - **适用场景**:**专用于低速设备(1.5 Mbps)**,如老式键盘、鼠标等。这类设备无法解析高速/全速的SOF包,需要更简单的信号机制[^1]。 - **发送周期**:主机严格按$1ms$间隔发送KEEP-Alive信号(对比:全速SOF周期为$1ms$,高速SOF为$125\mu s$)[^1]。 #### 2. **KEEP-Alive信号的本质** KEEP-Alive并非标准USB数据包,而是物理层的**电平信号**: - **实现形式**:表现为**End of Packet (EOP)脉冲**,由总线电平的特定变化构成: - 逻辑"0":差分数据线`D+``D-`同时拉低(SE0状态) - 逻辑"1":差分线恢复`J`状态(`D+`低, `D-`高)或`K`状态(`D+`高, `D-`低) ```plaintext 示例时序: 正常总线状态 (J/K) → SE0 (持续2位时间) → J状态 (1位时间) → 总线空闲 ``` - **信号特点**: - **无数据负载**:不包含PID、地址、CRC等字段,仅表示总线活动 - **极短时长**:典型持续时间为2-3个位时间(低速下约$1.33-2\mu s$) - **低开销**:物理层直接生成,无需协议层处理[^1] #### 3. **低速设备通信的完整流程** KEEP-Alive需结合**PRE包**协同工作: 1. **主机发送PRE包**:在全速信道广播**前导包(PRE)**,通知集线器"即将切换至低速模式" - PRE包结构:`SYNC` + `PID_{PRE}`(包标识符`0x3C`) 2. **切换至低速模式**:集线器收到PRE后,打开低速端口通道 3. **发送KEEP-Alive**:主机在低速信道发送EOP脉冲信号 ```mermaid graph LR A[主机] -->|全速模式| B[发送PRE包] B --> C[集线器切换低速端口] C -->|低速模式| D[发送KEEP-Alive/EOP] D --> E[维持设备活跃] ``` #### 4. **与SOF信号的关键区别** | 特性 | KEEP-Alive (低速设备) | SOF (高速/全速设备) | |---------------------|-------------------------------------|-----------------------------------| | **物理形式** | EOP电平脉冲 | 完整令牌包(含PID/帧号/CRC) | | **协议层** | 物理层信号 | 事务层数据包 | | **是否需要PRE包** | 是(需先切换低速信道)[^1] | 否 | | **功能扩展性** | 仅防挂起 | 防挂起+帧同步+带宽管理 | #### 5. **功耗管理关联** KEEP-Alive直接关联**总线供电设备**的功耗控制: - 低速设备通常属于**低功耗总线供电设备**(最大功耗$≤100mA$) - 未收到KEEP-Alive时,设备$3ms$内进入挂起模式,功耗降至$0.5mA$以下[^2] - 主机通过调节KEEP-Alive间隔,精细控制设备功耗[^2] > ⚠️ **注意**:若主机意外停止发送KEEP-Alive(如系统睡眠),低速设备将进入挂起模式直至总线恢复活动[^1]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Pinia-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值