Vue3 非Prop的Attribute
指传向一个组件,但是该组件并没有相应 props 或 emits 定义的 attribute。
常见的示例包括 class
、style
和 id
attribute。
Attribute 继承
当组件返回单个根节点时,非 prop 的 attribute 将自动添加到根节点的 attribute 中。
1 | app.component('date-picker', { |
通过 data-status
attribute 定义 <date-picker>
组件的状态,它将应用于根节点
1 | <!-- 具有非 prop 的 attribute 的 date-picker 组件--> |
同样的规则也适用于事件监听器:
1 | <date-picker @change="submitChange"></date-picker> |
1 | app.component('date-picker', { |
禁用 Attribute 继承
如果你不希望组件的根元素继承 attribute,可以在组件的选项中设置 inheritAttrs: false
。
禁用 attribute 继承的常见场景是需要将 attribute 应用于根节点之外的其他元素。
通过将 inheritAttrs
选项设置为 false
,你可以使用组件的 $attrs
property 将 attribute 应用到其它元素上,该 property 包括组件 props
和 emits
property 中未包含的所有属性 (例如,class
、style
、v-on
监听器等)。
如果需要将所有非 prop 的 attribute 应用于 input
元素而不是根 div
元素,可以使用 v-bind
缩写来完成。
1 | app.component('date-picker', { |
1 | <!-- date-picker 组件使用非 prop 的 attribute --> |
多个根节点上的 Attribute 继承
与单个根节点组件不同,具有多个根节点的组件不具有自动 attribute fallthrough (隐式贯穿) 行为。如果未显式绑定 $attrs
,将发出运行时警告。
1 | <custom-layout id="custom-layout" @click="changeValue"></custom-layout> |
1 | // 这将发出警告 |