【问题标题】:VueJS - Filter elements on list base on search valueVueJS - 根据搜索值过滤列表中的元素
【发布时间】:2019-10-22 01:10:40
【问题描述】:

在我的页面中,我有一个由存储在组件中的局部变量构建的元素列表。我添加了一个用于搜索的输入文本,以便能够过滤和仅显示名称包含用户搜索的字符串的元素。

我从未在我的列表中看到任何使用以下代码刷新的内容。我的错在哪里?

模板

<input v-model="searchTextValue" v-on:keyup="onSearch" type="text" />

<div v-for="car in localCars" :key="car.id">
    <span>{{ car.name }}</span>
</div>

JS

export default {
    data() {
        return {
            localCars: [{name: "audi"}, {name:"fiat"}],
            searchTextValue : ""
        };
    },
    methods: {
        onSearch() {
            this.localCars.filter(function (car) {
                return car.name.indexOf(this.searchTextValue) !== -1;
            });
        },
    }
}

【问题讨论】:

  • 刷新是否意味着页面没有反应?因为它不会刷新。这就是我认为 vue 的意义所在。
  • 检查这个jsfiddle示例jsfiddle.net/dkmmhf5y/1
  • @Thamerbelfkih 您应该将其发布为答案

标签: javascript vue.js filter vuejs2


【解决方案1】:

您的代码应如下所示:-

演示Here

<template>
  <div>
    <input v-model="searchTerm" type="text">
    <div></div>
    <div v-for="car in filterByTerm" :key="car.id">
      <span>{{ car.name }}</span>
    </div>
  </div>
</template>


<script>
export default {
  name: "filter-demo",
  data() {
    return {
      localCars: [{ name: "audi" }, { name: "fiat" }],
      searchTerm: ""
    };
  },
  computed: {
    filterByTerm() {
      return this.localCars.filter(car => {
        return car.name.toLowerCase().includes(this.searchTerm);
      });
    }
  },
  methods: {}
};
</script>

【讨论】:

  • this.searchTerm 也需要toLowerCase(),如果你想搜索不区分大小写。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-14
  • 2021-12-29
  • 1970-01-01
  • 1970-01-01
  • 2020-02-29
  • 2019-03-04
相关资源
最近更新 更多