javascript - VueJS 基于输入过滤数组

标签 javascript vue.js vuejs2

我有一个 应用程序,我正在尝试根据来自表单的输入来过滤数组。

问题是我的数组 autocomplete 没有填充与名字查询匹配的访问者。

我的 HTML

<input class="input" placeholder="First Name" v-model="visitor.first" @keyup.enter="searchVisitors">

我的 Vue 实例

new Vue({

  el: '#app',

  data: {
    previousVisitors: [],
    autocomplete: [],
    visitor: {}
  },

  mounted() {
    axios.get('/visitors/all').then(response => this.previousVisitors = response.data);
  },

  methods: {

    searchVisitors(){
      var q = this.visitor.first;
      this.autocomplete = this.previousVisitors.filter(item => {return item.firstName === q});
      console.log(this.autocomplete);
    }
   }
});

我可以确认来自当前正在填充 previousVisitors 数组的 axios 的响应包含每个先前访问者的 firstName

我做错了什么?

最佳答案

您的 v-model 设置为 visitor.first 但您正在根据 firstName 进行过滤。

更改您的代码以使用 v-model="visitor.firstName"

还有一些其他问题可能会在以后引起问题。首先,您动态地向 visitor 添加一个值。那属于 change detection caveat并且该值不会 react 。您应该初始化该值。

data: {
  ...
  visitor:{firstName: ''}
}

此外,您真的应该为过滤器使用计算值。这是一个完整的示例。

console.clear()

const visitors = [{
    firstName: "bob"
  },
  {
    firstName: "mary"
  },
  {
    firstName: "susan"
  },
  {
    firstName: "Phillip"
  },

]


new Vue({

  el: '#app',

  data: {
    previousVisitors: [],
    visitor: {
      firstName: ''
    }
  },

  mounted() {
    // axios.get('/visitors/all').then(response => this.previousVisitors = response.data);
    setTimeout(() => this.previousVisitors = visitors)
  },
  computed: {
    autocomplete() {
      return this.previousVisitors.filter(v => v.firstName === this.visitor.firstName)
    }
  }
});
<script src="https://unpkg.com/vue@2.2.6/dist/vue.js"></script>
<div id="app">
  <input class="input" placeholder="First Name" v-model="visitor.firstName"> {{autocomplete}}
</div>

关于javascript - VueJS 基于输入过滤数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45377039/

相关文章:

javascript - 如何在 knockout js 中访问 'foreach:' 绑定(bind)的大小>

javascript - 检查对象是否具有与数组中定义的字段值相同的值

javascript - 为什么使用 getClientRects() 的相同代码会产生不同的结果?

javascript - Vuejs 事件在 Firefox 中不起作用 - 在 Chrome 中很好

css - 如何将 SASS "normal way"与 vue.js 一起使用?

vuejs2 - Vue.js - 元素 UI - 动态规则验证表单

javascript - VueJS : Re-create component after clicking on the same "router-link"?

javascript - 使用 Ajax 将数据传递到 PHP 文件

javascript - vue.js 数据清除后未更新

vue.js - 如何在 VueJs 中指定构建文件项目的自定义名称