【问题标题】:How to filter array using computed property?如何使用计算属性过滤数组?
【发布时间】:2016-08-02 02:28:44
【问题描述】:

如何使用Vue.js 2.0 中的计算属性过滤数组?在旧版本的Vue 中,这项任务非常简单,但现在涉及更多。我在表格中显示数据:

 <tr v-for="person in filterPeople">
  <td>{{person.name}}</td>
  <td>{{person.age}}</td> 
</tr>

我有一个输入字段,我可以在其中过滤姓名和年龄。我不确定我在这里做错了什么:

computed: {

  filterPeople: function(){
    var self = this
    return this.people.filter(function(p){
      return p.name.indexOf(self.searchDetails) > - 1
   })  
  }
}

如果我在输入中输入,它不会像我预期的那样按姓名或年龄过滤人员。演示:http://codepen.io/p-adams/pen/AXPKko

【问题讨论】:

  • edit您的问题直接在问题正文中显示相关代码。
  • 编辑了我的问题

标签: javascript vue.js


【解决方案1】:

你的问题很简单。您正在表格内使用输入标签。尝试添加包含 div 标签。给它应用程序 ID 并将输入元素放入其中。这应该可以解决问题。

<div id="app">
  <input
         class="form-control"
         v-model="searchDetails"
         placeholder="filter by name or age"
         >
    <table class="table table-striped" >
      <thead>
      ...rest of code

Vue 仍然受制于 HTML 的一些规则,其中之一是表格标签只能将某些标签作为直接子标签。

【讨论】:

  • 啊,是的。不知道我是怎么错过的。谢谢。
  • 当您考虑 Vue 时,这实际上有点容易做到。因为通常情况下,您在模板方面拥有更大的灵活性。
  • 好的。我想知道为什么我无法按年龄过滤。似乎只适用于名称。使用内置过滤器,事情变得容易得多。
  • p.name.indexOf(self.searchDetails) &gt; - 1 仅按p.name 过滤。您可能需要编写两个过滤器函数,如果searchDetails 是文本,则使用一个,如果是数字,则使用另一个。
  • 可能是因为通过input 输入的数字实际上是一个字符串,而我的过滤器正试图将它与一个整数值匹配。无论哪种情况,我似乎都需要两个过滤功能。
猜你喜欢
  • 2022-11-20
  • 1970-01-01
  • 1970-01-01
  • 2021-06-28
  • 2019-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多