繁体   English   中英

Vue 过滤器 - 根据搜索输入返回对象

[英]Vue filter - Return object depending on search input

我有这个搜索输入:

<input type="text" v-model="searchHero" placeholder="Search Hero">

而这个“输出”区域:

<div class="item wrapper" v-for="hero in filterSearch">
  {{ hero.image }} <br>
  {{ hero.name }} <br>
  {{ hero.bookmark }} <br>
</div>

这个想法是用户搜索一个英雄,输出应该只显示他正在搜索的英雄。 例如,如果他开始输入Ir ,则输出区域应显示Iron ManIron Man2

这是完整的 vue js 代码:

new Vue({
  el: '#app',
  data: {
    searchHero: '',
    heroes: [
      { name: 'Spiderman', image: true, bookmark: 'Bookmarkhere' },
      { name: 'Hulk', image: true, bookmark: 'Bookmarkhere' },
      { name: 'Iron Man', image: true, bookmark: 'Bookmarkhere' },
      { name: 'Captain America', image: true, bookmark: 'Bookmarkhere' },
      { name: 'Iron Man2', image: true, bookmark: 'Bookmarkhere' }
    ]
  },
  computed: {
    filterSearch() {
      return this.heroes.filter( heroes => {
        return heroes.name.toLowerCase().includes(this.search.toLowerCase())
      })
    }
  }
});

我在控制台中收到以下错误:

[Vue 警告]:渲染错误:“TypeError:无法读取未定义的属性 'toLowerCase'”(在 中找到)

我相信问题出在 filderSearch() 上,但我看不出是什么。

这是整个 jsfiddle: https ://jsfiddle.net/prozik/no2uLgrd/

注意:将<div class="item wrapper" v-for="hero in filterSearch">

<div class="item wrapper" v-for="hero in heroes">如果您想查看所有英雄。

你的过滤表达式有点不对,试试这个

computed: {
  filterSearch() {
    return this.heroes.filter( hero => {
      return !this.searchHero ||
        hero.name.toLowerCase().indexOf(this.searchHero.toLowerCase()) > -1
  })
}

}

请注意,javascript 数组过滤器单独传入每个项目,一次一个(您已编码为好像传入了整个列表)。

还添加了!searchHero以便在搜索为空时显示所有内容。

这是小提琴

参数名称 heros 需要是 hero。

filterSearch () {
  return this.heroes.filter(hero => {
    return hero.name.toLowerCase().includes(this.searchHero.toLowerCase())
  })
}

还建议将:key="hero.id"添加到模板中的 v-for 循环中。 Vue 备忘单

我会这样做。

更干净和可读的代码。

filterSearch() {
  return this.heroes.filter( hero => {
    return hero.name.toLowerCase().match(this.searchHero.toLowerCase())
  })
}

让我知道它是如何工作的。 祝你好运!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM