
问题如下:
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">` 谢谢大家! |