$attrs 默认自动继承到单根元素,但多根或需过滤/透传至非根元素时须设 inheritattrs: false 并显式 v-bind。

在 Vue Options API 中,$attrs 是一个对象,包含父组件传入但未被 props 声明、也未被 v-on(如 @click)显式监听的属性和事件。它默认会**自动继承到组件的根元素上**,但如果你需要手动控制透传(比如透传给非根元素、或过滤/合并属性),就得显式使用 $attrs。
确认 $attrs 默认行为
Vue 2.4+ 和 Vue 3(Options API 模式)中,只要组件模板只有一个根元素,且没有显式绑定 v-bind="$attrs",$attrs 仍会自动“冒泡”到该根元素——这是默认继承(attribute fallthrough)。但一旦你写了 v-bind="$attrs",就等于接管了透传逻辑,此时默认继承会被禁用。
- 如果组件模板只有一个
<div>,没写 <code>v-bind="$attrs",class、id、data-*、自定义属性等会自动加到这个<div> 上<li>如果写了 <code><div v-bind="$attrs">,那所有未声明的属性都会被绑定到这个 <code><div>,但其他子元素不会自动获得<li>如果组件有多个根节点(如多个并列元素),<code>$attrs不会自动应用,必须手动v-bind到目标元素
手动透传 $attrs 到根元素(显式控制)
当你想明确控制哪些属性透传、或需要合并已有属性时,用 v-bind="$attrs" 最直接:

