Donc, je vais d'abord me pencher sur Vue.js depuis 2.0. Et j'ai du mal à passer de filter
à computed
.Le filtrage calculé ne fonctionne pas
Voici où je suis (en utilisant vue-resource
pour l'appel API):
var moviesURL = 'http://localhost/api/movies';
var app = new Vue({
el: '#app',
data: {
liveFilter: '',
movies: ''
},
methods: {
getMovies: function() {
this.$http.get(moviesURL).then(response => {
this.movies = response.body;
}, response => {
console.log(response);
});
}
},
computed: {
filteredMovies: function() {
var self = this
return this.movies.filter(function(movie) {
return movie.indexOf(self.liveFilter) !== -1
});
}
},
created: function() {
this.getMovies();
}
});
Et je continue à recevoir ces erreurs:
Et je ne peux pas vraiment mon doigt sur ce que je fais mal ... Une idée?
Oh, je ne savais pas que l'initialisation était importante même quand vous la réévaluez après, merci. Mais sachez qu'il bloque 'return movie.indexOf' comme si le film n'était pas un tableau ... Mais '{{movie.title [0] .value}}' fonctionne dans le HTML, donc, c'est, n'est pas il? – Axiol
'indexOf' fonctionne très bien uniquement pour les tableaux de valeurs primitives, par exemple' ['filter', 'filter2'] ', je suppose que votre tableau de films est une collection d'objets, pas de valeurs primitives, peut-être que vous pouvez utiliser lodash (ou undescore) à filtrer en fonction de l'attribut de l'objet https://lodash.com/docs/4.17.4#filter – madg34
Mais, vous pouvez juste écrire quelque chose comme '' 'return this.movies.filter (function (movie) { retourner le film .title == self.liveFilter }); '' 'Mais gardez à l'esprit que c'est une comparaison exacte;) Peut-être que regexp aidera ici. Btw - pourquoi le titre est un tableau? – madg34