【问题标题】:How can I get the length of a computed array in Vue.js如何在 Vue.js 中获取计算数组的长度
【发布时间】:2020-03-08 16:12:24
【问题描述】:

我有一个通过 JSON 文件搜索的搜索输入 - 它工作正常,我现在正尝试向用户显示找到的结果数量。 (例如,“找到 26 个结果” - 或“未找到结果”)

我正在使用一种计算方法来检查用户是否单击了搜索输入,然后检查 JSON 文件以将用户的查询与 JSON 文件中的字符串相匹配。这是我当前的代码:

    computed: {

    filteredPrizesByQuery: function() {
      if (this.searchInputClicked == true) {
        return this.prizes.filter(prize => {
          return (
            prize.prizeTitle.toLowerCase().match(this.query) || 
            prize.prizeTag.toLowerCase().match(this.query)
          )
        });
      } else
        return this.prizes.filter(prize => {
          return (
            prize.prizeType1Name.match(this.tabbedQuery) ||
            prize.prizeType2Name.match(this.tabbedQuery)
          );
        });
    }
  }

当我在搜索框中输入查询然后查看我的 Vue 开发工具时,我可以看到数组计数已更新(计算不足),例如。 filteredPrizesByQuery:Array[26]。这是我想向用户显示的值,但我不知道如何访问这个值。

我尝试在计算方法中检查filteredPrizesByQuery 的长度或“prize”的长度,但我得到最大调用堆栈大小错误或未定义。

【问题讨论】:

    标签: javascript vue.js


    【解决方案1】:

    您可以简单地创建另一个计算属性并访问 filteredPrizesByQuery 计算属性长度,如下所示:

    computed: {    
       filteredPrizesByQuery: function() {
          // Your current logic returning array here...
       },
       filteredPrizesCount: function() {
          return this.filteredPrizesByQuery.length;
       }
    }
    

    然后像这样更新 UI:

    <p>{{filteredPrizesCount}} results found</p>
    

    【讨论】:

    • 谢谢,这成功了。你能解释一下为什么我不能通过普通方法访问 this.filteredPrizesByQuery.length,为什么它必须在内部计算?
    • 实际上,计算属性只会在其某些反应性依赖项发生变化时重新评估。此外,计算的属性会根据其反应性依赖关系进行缓存。因此,当您调用长度时,它仍在查看尚未评估的初始数组。但是,当您在 filteredPrizesCount 中使用 length 时,它会强制它在 filterPrizesByQuery 值更改后立即重新评估。
    猜你喜欢
    • 2016-12-12
    • 1970-01-01
    • 2010-11-10
    • 1970-01-01
    • 2017-06-19
    • 1970-01-01
    • 2022-09-23
    • 2012-03-10
    相关资源
    最近更新 更多