Vue 如何将传递给第二级子组件的 props 复用给顶层组件?

2021-02-18 18:40:15 +08:00
 agdhole

问题如下:

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 的属性,不用编写重复的代码?

916 次点击
所在节点    问与答
4 条回复
juzisang
2021-02-18 18:43:17 +08:00
```js
import BaseCard from './BaseCard'

{
props:{
...BaseCard.props
}
}

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

`<base-card v-bind="$props">`

谢谢大家!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/754007

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX