问题如下:
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 1
```js
import BaseCard from './BaseCard' { props:{ ...BaseCard.props } } ``` |
2
toesbieya 2021-02-18 18:45:35 +08:00 1
$attrs 可以,不过缺点是使用了$attrs 的组件会在父组件 render 时也 render,不知道 vue3 里有没有解决
|
3
agdhole OP @juzisang #1 非常感谢!茅塞顿开,
我刚才尝试了一下,props 可以直接这样复用,但是模板里面仍然要编写这类的属性 <base-card :color="">,有没有办法在模板中也自动继承呢? |
4
agdhole OP 我使用 `v-bind` 来解决了模板内复用的这个问题:
`<base-card v-bind="$props">` 谢谢大家! |