问题如下:
1.我有一个 BaseCard 组件,代码:
<v-card :light="light" :dark="dark" :color="color">
<slot />
</v-card>
props: {
dark: {
type: Boolean
},
light: {
type: Boolean
},
color: {
type: String
}
}
2.然后创建了基于该 BaseCard 组件扩展的二级子组件 InfoCard:
<base-card :light="light" :dark="dark" :color="color">
<div>
info card
</div>
</base-card>
props: {same from base}
3.在 Vue page 调用二级子组件时的代码如下:
<info-card color="" light="" />
问题在于:
如果我创建了多个基于 BaseCard 组件的二级子组件,
那么我想要为每个二级子组件都可以使用 :light="light" :dark="dark" :color="color" 这类 BaseCard 的属性,就需要为每个二级子组件都编写这一堆相同的 props。
有没有办法让每个基于 BaseCard 的二级子组件都自动继承 BaseCard 的属性,不用编写重复的代码?
1
juzisang 2021-02-18 18:43:17 +08:00 ```js
import BaseCard from './BaseCard' { props:{ ...BaseCard.props } } ``` |
2
toesbieya 2021-02-18 18:45:35 +08:00 $attrs 可以,不过缺点是使用了$attrs 的组件会在父组件 render 时也 render,不知道 vue3 里有没有解决
|
3
agdhole OP @juzisang #1 非常感谢!茅塞顿开,
我刚才尝试了一下,props 可以直接这样复用,但是模板里面仍然要编写这类的属性 <base-card :color="">,有没有办法在模板中也自动继承呢? |
4
agdhole OP 我使用 `v-bind` 来解决了模板内复用的这个问题:
`<base-card v-bind="$props">` 谢谢大家! |