Vuejs计算的API响应过滤器不起作用

Posted

技术标签:

【中文标题】Vuejs计算的API响应过滤器不起作用【英文标题】:Vuejs computed filter on API response not working 【发布时间】:2020-09-06 06:44:40 【问题描述】:

我有一个 API 响应,我正在尝试运行搜索过滤器,但我似乎无法弄清楚我做错了什么。我觉得这是如何返回响应的问题,我尝试过解析/字符串化,但每次都会遇到相同的错误。我收到的错误是:

渲染错误:“TypeError:this.heroList.filter 不是函数”

我的 html

<input class="searchbar" placeholder="Search..." type="text" v-model="search" />

<div class="flex-container">
  <div class="flex-item" v-for="(a, index) in filteredHeroList" :key="index">
    <img
      @click="selectedHero(a)"
      class="row full-image"
      :src="'http://cdn.dota2.com/apps/dota2/images/heroes/' + a.shortName + '_full.png'"
      
    />
  </div>
</div>

数据:

data() 
 return 
  search: "",
  heroList: [],
;

,

我的 Axios 请求:

getHeroes() 
  axios
    .get(`https://api.stratz.com/api/v1/Hero`)
    .then(response => 
      this.heroList = response.data;
      console.log(response.data);
    )
    .catch(err => 
      console.log(err);
    );
,

我正在尝试过滤的响应:


  "id": 1,
  "name": "npc_dota_hero_antimage",
  "displayName": "Anti-Mage",
  "shortName": "antimage",
  "abilities": [
    
      "slot": 1,
      "abilityId": 5003
    ,
    
      "slot": 2,
      "abilityId": 5004
    
  ],
  "roles": [
    
      "roleId": 0,
      "level": 3
    ,
    
      "roleId": 1,
      "level": 3
    
  ],
  "talents": [
    
      "slot": 0,
      "gameVersionId": 131,
      "abilityId": 6137
    ,
    
      "slot": 1,
      "gameVersionId": 131,
      "abilityId": 6119
    
  ],
  "stat": 
    "gameVersionId": 131,
    "enabled": true,
    "heroUnlockOrder": 1,
    "team": true,
    "cmEnabled": true,
    "newPlayerEnabled": true,
    "attackType": "Melee",
    "startingArmor": 2.36,
    "startingMagicArmor": 25,
    "startingDamageMin": 29,
    "startingDamageMax": 33,
    "attackRate": 1.4,
    "attackAnimationPoint": 0.3,
    "attackAcquisitionRange": 600,
    "attackRange": 150,
    "primaryAttribute": "agi",
    "heroPrimaryAttribute": 1,
    "strengthBase": 23,
    "strengthGain": 1.3,
    "intelligenceBase": 12,
    "intelligenceGain": 1.8,
    "agilityBase": 24,
    "agilityGain": 3,
    "hpRegen": 0.25,
    "mpRegen": 0,
    "moveSpeed": 310,
    "moveTurnRate": 0.5,
    "hpBarOffset": 0,
    "visionDaytimeRange": 1800,
    "visionNighttimeRange": 800,
    "complexity": 1
  ,
  "language": 
    "heroId": 1,
    "gameVersionId": 131,
    "languageId": 0,
    "displayName": "Anti-Mage",
    "bio": "random bio string",
    "hype": "random hype string"
  ,
  "aliases": [
    "am"
  ]

我的计算过滤器:

computed: 
filteredHeroList() 
  return this.heroList.filter(hero => 
    return (
      hero.shortname
        .toLowerCase()
        .includes(this.search.toLowerCase()));
  );

【问题讨论】:

因此,由于某种原因,我的 heroList 以对象而不是数组的形式返回。知道为什么吗? 看看你的 "this".heroList "this" 是 vue 还是其他的 @Mars.Tsai 我不确定你到底是什么意思 【参考方案1】:

这最终解决了我的问题。

【讨论】:

以上是关于Vuejs计算的API响应过滤器不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Vue js:Vuetify 服务器端数据表搜索过滤器不起作用

API 路由在 Laravel VueJS 应用程序中不起作用

动画在 api 响应成功回调中不起作用

Axios 使用 vuejs cli 获取 php 文件不起作用

操作过滤器在 asp.net 核心 Web API 中不起作用

JavaScript:在另一个 setTimeOut(嵌套 setTimeOut)中的 setTimeOut 以刺激 API 响应不起作用