【发布时间】:2018-07-09 01:43:18
【问题描述】:
我有这个搜索输入:
<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 Man 和Iron 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">如果你想看到所有的英雄。
【问题讨论】:
标签: javascript filter vue.js vuejs2