javascript - Vue2 使用计算属性来过滤嵌套 v-for 的问题

标签 javascript vue.js vuejs2

我有一个奇怪的 HTML 设置,我需要循环遍历。我从 Firebase 获取两部分数据。有一个categories和一个businesses数据集,结构如下:

Businesses
    -UniqueFirebaseID
        cat: "food"

Categories
    -IniqueFirebaseID
        name: "food"

然后我想像这样循环访问我的数据(请原谅非语义标记):

<ul>
    <li v-for="cat in categories">
        <ul>
            <li v-for="business in filteredByCat">{{business.name}}</li>
        </ul>
    </li>
</ul>

我正在尝试将计算属性放在一起进行过滤。下面的内容代表了我正在尝试做的事情,但不确定如何去做。有什么建议吗?

computed: {
    filteredByCat () {
      return this.businesses.filter((element) => {
        return element.cat.match(cat.name)
      })
    }
  }

最佳答案

使用方法代替。

<ul>
    <li v-for="cat in categories">
        <ul>
            <li v-for="business in filteredByCat(cat)">{{business.name}}</li>
        </ul>
    </li>
</ul>

methods: {
    filteredByCat (cat) {
      return this.businesses.filter((element) => {
        return element.cat.match(cat.name)
      })
    }
  }

或者,您可以使用计算来构建您想要迭代的数据结构。

computed:{
  businessesByCategory(){
    return this.categories.reduce((acc, category) => {
      acc[category] = this.businesses.filter(b => b.category == category)
      return acc
    }, {})
  }
}

你的新模板将是

<ul>
  <li v-for="(value, key) in businessesByCategory"> {{key}}
    <ul>
      <li v-for="business in value">{{business.name}}</li>
    </ul>
  </li>
</ul>

Example .

关于javascript - Vue2 使用计算属性来过滤嵌套 v-for 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44190013/

相关文章:

javascript - 如何在VueJS中传递props?

javascript - 如何在javascript中添加两个大数?

webpack - 在编译时运行的代码与在运行时运行的代码

javascript - 如何对一个 textarea 组件的文本值进行数据绑定(bind)并更新它?

javascript - Vue2动态输入名称

javascript - 如何在vue中创建警告确认框

javascript - 如何为所选元素添加背景颜色

javascript - wavesurfer.js destroy() 导致未捕获( promise 中)DOMException : Cannot close a context that is being closed or has already been closed

javascript - 将数学运算的结果绑定(bind)到 vuejs 中的输入或 div 结果

javascript - 具有动态项槽的 vuetify 数据表格式列