【问题标题】:Conditionally displaying list of items based on passed prop values in Vue根据 Vue 中传递的 prop 值有条件地显示项目列表
【发布时间】:2020-03-06 14:41:49
【问题描述】:

我创建了这个简单的卡片组件:

Card.vue

<template>
            <v-card :loading="loading">
                <v-card-text v-if="!loading">
                    <div class="text-center font-weight-black title text--primary">
                        {{data}} {{unit}}
                    </div>
                    <div class="text-center">
                        {{title}}
                    </div>
                </v-card-text>
            </v-card>
</template>

我向这个组件传递了以下道具:

props: ['title', "data", "unit", "loading"]

现在在父组件中,我使用 v-for 创建上述组件的列表:

 <Card
          v-for="d in basic_fc"
          v-bind:key="d.id"
          v-bind:title="d.title"
          v-bind:data="d.data"
          v-bind:unit="d.unit"
          v-bind:loading="loading"
          :class="'home__simple-finance--'+d.id"
 ></Card>

和计算属性:

computed: {
  ...mapGetters(["basic_fc"]),
  loading () {
      if (this.basic_fc.length==0) {
        return true
      } 
      else {
        return false
      }
    }
  }

现在basic_fc 是一个返回值数组的 vuex getter。问题是这个数组可以为空,所以当它为空时,loading 变量为true,反之亦然。

因此,预期的行为是 Card.vue 组件显示为空卡片。将loading 值传递给v-card 和v-card-text 如果它的单个组件有效,但不知何故它不适用于列表。 那么我怎样才能让它呈现卡片列表呢?

【问题讨论】:

  • 您可以将loading 属性简化为return this.basic_fc.length === 0 :)

标签: vue.js vuejs2 vuex vuetify.js


【解决方案1】:

v-for 是一个 for 循环。如果列表是空的,那么它甚至不会运行,这就是你没有得到任何卡片的原因。我希望你的问题是正确的

你可以这样做

<div v-if="!loading">
 <Card
      v-for="d in basic_fc"
      :key="d.id"
      :title="d.title"
      :data="d.data"
      :unit="d.unit"
      :loading="loading"
      :class="'home__simple-finance--'+d.id"
  ></Card>
</div>
<div v-else>
  <Card
      :loading="loading"
      :class="'home__simple-finance--'+d.id"
  ></Card>
</div>

PS:v-bind:{{param}} 与:{{param}} 相同

【讨论】:

  • v-bind:{{param}} 与 :{{param}} 相同,但许多 linter 对简化形式并不满意 ;)
  • 真的!刚刚补充说,因为我将问题中的 v-bind: 替换为 : ,不想让任何人感到困惑
【解决方案2】:

computed 变量loading 的逻辑应该在 v-card 组件中进行,而不是在父组件中。将计算属性作为道具传递不是一个好习惯。

【讨论】:

  • 我也想过这个,但是计算值依赖于空值,所以即使我将计算逻辑放在子组件中,我认为它根本不会被计算
猜你喜欢
  • 2023-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-04
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
  • 2012-08-22
相关资源
最近更新 更多