Vue.js 通过特定列的多个过滤器过滤数据

Vue.js filter data by multiple filters on specific columns

在 vue.js 中,如何使用针对 table 上特定列的多个过滤器来过滤 table。

例如,如果我有两个搜索字段 nameage,我如何绑定它们以搜索下方 table 中的相应列。因此,如果用户在名称输入中输入名称,它应该只在名称列中搜索名称。如果用户也输入了年龄,那么它应该形成一个 and 条件并在年龄列中搜索年龄。目前过滤器只搜索整个 table.

 <!DOCTYPE html>
        <html lang="en">
        <head>
            <meta charset="UTF-8">
            <title>The Vast World of Vue.js</title>
            <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css">
        </head>

        <body id="demo" class="container">

            <input v-model="name" class="form-control" placeholder="search by name"><br>

            <input v-model="age" class="form-control" placeholder="search by age">

            <table class="table table-striped">

                <thead>
                    <tr>
                        <th >
                            Name
                        </th>
                        <th >
                            Age
                        </th>
                </thead>
                <tbody>
                    <tr v-for="item in people | filterBy name | filterBy age">
                        <td>{{ item.name }}</td>
                        <td>{{ item.age }}</td>
                    </tr>
                </tbody>
            </table>

            <script src="http://vuejs.org/js/vue.js"></script>

            <script>
               new Vue({

                        el: '#demo',

                        name: '',

                        age: '',

                        data: {

                            people: [
                                { name: 'John', age: 50 },
                                { name: 'Jane', age: 22 },
                                { name: 'Paul', age: 34 },
                                { name: 'Kate', age: 15 },
                            ]
                        }

                    });


            </script>
        </body>
        </html> 

Vue 2

由于我们不再提供过滤器,因此您需要使用计算 属性。

所以你可以这样做:

{
  data: {
    people: [{ name: }],
    age: 28,
    name: 'bi',
  }
  computed: {
    filteredPeople () {
      const { name, age, people } = this
      return this.people
        .filter(person => person.name.toLowerCase().indexOf(name.toLowerCase()) > -1)
        .filter(person => person.age === age)
    },
  },
}

然后你会遍历 filteredPeople 而不是 people

<tr v-for="person in filteredPeople">...</tr>

视觉 1

如果您查看 filterBy 的 API 文档中的第二个示例,您会发现可以将其限制为一个字段。

你想要这样的东西:

item in people | filterBy name in 'name' | filterBy age in 'age'