【问题标题】:How can this computed be improved in Vuejs?如何在 Vuejs 中改进这种计算?
【发布时间】:2021-03-21 02:17:28
【问题描述】:

我正在尝试根据条件返回计算结果。但是,如果条件失败,我考虑返回 null ,然后在添加 v-if 作为结果时变得丑陋。这是它的样子:

   AreAllItemsAvailable() {
      const finalAvailableItems = this.allItems.filter(
        item => this.availableItems.includes(item.id),
      )
      if (finalAvailableItems.length) {
        return finalAvailableItems.every(item => item.count === '1')
      } else {
        return null
      }
    },

然后在模板中,我有这样一个东西:

v-if= "AreAllItemsAvailable !=null && !AreAllItemsAvailable"

如何改进?

【问题讨论】:

  • v-if="!AreAllItemsAvailable" 会同时捕获两者,但无论如何您都应该返回false 而不是null。 “AreAllItemsAvailable”是一个是/否问题

标签: javascript vue.js ecmascript-6 vuejs2 vue-component


【解决方案1】:

filter 方法如果没有找到任何匹配项,则返回一个空数组[],因此您可以保留一个返回数组(填充或空)的过滤器方法并对其进行迭代:

 AreAllItemsAvailable() {
     return this.allItems.filter(
        item => this.availableItems.includes(item.id) && item.count === '1',
      )

}

在模板中:

 v-for="item in AreAllItemsAvailable"

【讨论】:

  • 与上述答案相关的另一件事。是否首先为此计算工作?:this.available items 只是一个 ids [0, 1, 2, 3,...] 的数组,例如虽然 this.allItems 是对象数组,所以基本上它应该过滤简单数组具有的所有可用项,这些项与对象数组的 id 匹配。我不确定包含的部分是否正确
  • 在控制台中返回未定义的过滤部分,这就是为什么我对那部分有一些想法
  • 你能在 codepen 或任何在线游乐场中重现一个简单的代码吗?
  • 成功了。谢谢。你能也检查一下这个问题吗? stackoverflow.com/questions/65236124/…
【解决方案2】:

要清理,您可以添加一个中间计算值:

finalAvailableItems() { 
    return this.allItems.filter(
            item => this.availableItems.includes(item.id)
          )
    }

AreAllItemsAvailable() {
        return this.finalAvailableItems.every(item => item.count === '1');
    },

无需返回空值:如果您的目标是检查所有项目是否可用,则布尔值 AreAllItemsAvailable 将在 finalAvailableItems 为空时返回 False

v-if= "!AreAllItemsAvailable"

【讨论】:

  • 与上述答案相关的另一件事。是否首先为此计算工作?:this.available items 只是一个 ids [0, 1, 2, 3,...] 的数组,例如虽然 this.allItems 是对象数组,所以基本上它应该过滤简单数组具有的所有可用项,这些项与对象数组的 id 匹配
  • 我认为您评论错误的答案,不是吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-19
相关资源
最近更新 更多