Я извлекаю данные из API Звездных войн, точнее, людей, и это работает. Я хочу создать функцию фильтра поиска, которая, когда я начинаю печатать, отображаются только имена с этими буквами. Это мой код для извлечения данных в файле StarWarsPeopleComponent. vue file:
<template>
<div class="container">
<div class="row justify-content-center">
<div class="col-md-8">
<input type='text' v-model="search" placeholder='Search people...'/><br>
{{ getAllStarWarsPeople() }}
<ul>
<li v-for="person in people.results">
{{ person.name }}
</li>
</ul>
</div>
</div>
</div>
</template>
<script>
export default {
name: "StarWarsPeopleComponent",
data() {
return {
people: [],
search: ''
}
},
mounted() {
console.log('Component mounted.')
},
methods:{
getAllStarWarsPeople() {
fetch("https://swapi.co/api/people/")
.then(response=>response.json())
.then(data=>{
this.people=data;
})
}
}
}
</script>
Обратите внимание, как я получаю доступ к данным в v-for с people.results.
Вот мой компонент обновлен с помощью вычисленной функции, которую я создал, но теперь данные не отображаются, и я получаю эту ошибку:
[Vue warn]: Error in render: "TypeError: this.people.filter is not a function".
Я довольно новичок в Vue js, и я не знаю что это значит или как это исправить. Кто-нибудь может помочь?
<template>
<div class="container">
<div class="row justify-content-center">
<div class="col-md-8">
<input type='text' v-model="search" placeholder='Search people...'/><br>
{{ getAllStarWarsPeople() }}
<ul>
<li v-for="person in filteredPeople">
{{ person.name }}
</li>
</ul>
</div>
</div>
</div>
</template>
<script>
export default {
name: "StarWarsPeopleComponent",
data() {
return {
people: [],
search: ''
}
},
mounted() {
console.log('Component mounted.')
},
methods:{
getAllStarWarsPeople() {
fetch("https://swapi.co/api/people/")
.then(response=>response.json())
.then(data=>{
this.people=data;
})
}
},
computed: {
filteredPeople: function() {
return this.people.filter((person) => {
return person.name.match(this.search);
});
}
}
}
</script>