【问题标题】:Vue JS axios request with filter - this.XX.filter is not a function带有过滤器的 Vue JS axios 请求 - this.XX.filter 不是函数
【发布时间】:2018-12-17 12:54:00
【问题描述】:

我在通过 API 获得的 JSON 文件上实现简单搜索功能时遇到问题。

单个元素起作用:我能够接收 API 数据,我能够对非 API 数据以及来自某些 API 的 API 数据执行搜索。

最大的问题是,即使没有过滤,数据也不会显示,并且我在控制台中遇到的错误表明

this.items.filter 不是函数

非常感谢!

<input type="text" v-model="search">
<div v-for="content in filteredItems" :key="content.name">
  <span> {{ content }}</span>
</div>

export default {
  name: "hello",
  data: () => ({
    search: '',
    items: []
  }),

mounted() {
  var self = this;
  axios
    .get("https://jsonplaceholder.typicode.com/posts/1")
    .then(function(response) {
      console.log(response);
      self.items = response.data;
    })
    .catch(function(error) {
      console.log(error);
    });
},
computed: {
  filteredItems: function() {
    let searchTerm = (this.search || "").toLowerCase();
    return this.items.filter(function(item) {
      let title = (item.title || "").toLowerCase();
      return title.indexOf(searchTerm) > -1;
    });
  }
}

例如,如果我将 API 更改为这个 API,则搜索工作正常。 https://restcountries.eu/rest/v2/all

【问题讨论】:

    标签: javascript json api vue.js axios


    【解决方案1】:

    https://jsonplaceholder.typicode.com/posts/1 返回单个项目。

    它不在数组中。它是一个对象。没有filter

    https://restcountries.eu/rest/v2/all 返回一个数组。有一个filter

    【讨论】:

    • 感谢您的快速响应!有没有办法对单个项目使用过滤器?
    • @Matthias ... 将其放入数组中?
    • 感谢所有快速回复。我对 JS 和 Vue 很陌生。我是否在计算部分转换它?有什么资源可以查到吗? 5mins google 并没有真正解决。
    • self.items = [response.data] 就足够了,但是如果您尝试处理可能返回或不返回数组的多个端点,您可能需要检查类型并在那里处理它。需要注意的是,不同的 API 会返回不同的东西,因此您需要处理单个对象、数组、对象键,例如,ID 作为键,数据作为键的属性等。
    • 非常感谢您抽出宝贵的时间提供高质量的意见!真的很感激!
    猜你喜欢
    • 2020-11-06
    • 1970-01-01
    • 1970-01-01
    • 2017-10-02
    • 2019-04-26
    • 2020-10-07
    • 2020-02-14
    • 2014-04-18
    • 2021-08-01
    相关资源
    最近更新 更多