I'm trying to filter a list when typing to text box which I get from Ajax call. The problem seems to be that the filter is applied before Ajax is ready.
HTML:
<input type="text" class="form-control" v-model="searchTerm">
<table>
<tr v-for="food in filteredItems">
<td>{{ food.name }}</td>
<td>{{ food.energy }}</td>
</tr>
</table>
helpers/index.js:
export default {
getFoods() {
return Vue.http.get('http://localhost:3000/foods/allfoods')
.then((response) => {
return response.data;
});
}
}
Vue component:
import helpers from '../helpers'
export default {
name: 'Search',
mounted() {
helpers.getFoods().then((response) => {
this.foodData = response;
});
},
data() {
return {
searchTerm: '',
foodData: [],
}
},
computed: {
filteredItems() {
return this.foodData.filter(function(food){return food.name.toLowerCase().indexOf(this.searchTerm.toLowerCase())>=0;});
}
}
When I load the page or start typing I get
'TypeError: undefined is not an object (evaluating 'this.searchTerm')'.
Everything works perfectly if I hard-code the foodData array.
Have I misunderstood something and/or what am I doing wrong?