本文共--字 阅读约--分钟 | 浏览: -- Last Updated: 2021-02-26
在 3.x 中,组件可以包含多个根节点!但是,这要求开发者显式定义 attribute 应该分布在哪里。
<template>
<header>...</header>
<main v-bind="$attrs">...</main>
<footer>...</footer>
</template>
当组件返回单个根节点时,非 Props attribute 将自动添加到根节点的 attribute 中。
<!-- date-picker 组件 -->
</template>
<div class="date-picker">
<input type="datetime" />
</div>
</template>
当使用的时候:
<date-picker data-status="activated" @change="submitChange"></date-picker>
这些 非Props 的属性会被自动继承到组件上,会被渲染成:
<div class="date-picker" data-status="activated" @change="submitChange">
<input type="datetime" />
</div>
如果你不希望组件的根元素继承 attribute,你可以在组件的选项中设置 inheritAttrs: false
<!-- date-picker 组件 -->
</template>
<div class="date-picker">
<input type="datetime" />
</div>
</template>
<script>
export default {
inheritAttrs: false,
}
</script>
那么,
<date-picker data-status="activated" @change="submitChange"></date-picker>
<!-- 将被渲染成 -->
<div class="date-picker">
<input type="datetime" />
</div>
但是,想继承的依然显示可以通过 v-bind="$attrs"
来显示继承,比如 date-picker 组件改为:
<!-- date-picker 组件 -->
</template>
<div class="date-picker">
<input type="datetime" v-bind="$attrs" />
</div>
</template>
<!-- 之后 -->
<date-picker data-status="activated" @change="submitChange"></date-picker>
<!-- 将被渲染成 -->
<div class="date-picker">
<input type="datetime" data-status="activated" @change="submitChange" />
</div>
所以,在Vue3中组件支持多个跟节点时,具有多个根节点的组件将不具有自动 attribute 回退行为。如果未显式绑定 $attrs,将发出运行时警告。