Comment puis-je utiliser la propriété calculée dans les listes. J'utilise VueJS v2.0.2.
Voici le code HTML:
<div id="el">
<p v-for="item in items">
<span>{{fullName}}</span>
</p>
</div>
Voici le code Vue:
var items = [
{ id:1, firstname:'John', lastname: 'Doe' },
{ id:2, firstname:'Martin', lastname: 'Bust' }
];
var vm = new Vue({
el: '#el',
data: { items: items },
computed: {
fullName: function(item) {
return item.firstname + ' ' + item.lastname;
},
},
});
Vous ne pouvez pas créer une propriété calculée pour chaque itération. Idéalement, chacun de ces items
serait leur composant propre afin que chacun puisse avoir sa propre propriété calculée fullName
.
Si vous ne voulez pas créer de composant user
, vous pouvez utiliser une méthode. Vous pouvez déplacer fullName
directement de la propriété computed
vers methods
, vous pouvez l'utiliser comme suit:
{{ fullName(user) }}
De plus, si vous avez besoin de passer un argument à un computed
, vous voudrez probablement une méthode à la place.
Ce qui vous manque ici, c'est que votre items
est un tableau, qui contient tous les éléments, mais que computed
est un simple fullName
, qui ne peut tout simplement pas exprimer. le fullName
s dans items
. Essaye ça:
var vm = new Vue({
el: '#el',
data: { items: items },
computed: {
// corrections start
fullNames: function() {
return this.items.map(function(item) {
return item.firstname + ' ' + item.lastname;
});
}
// corrections end
}
});
Puis dans la vue:
<div id="el">
<p v-for="(item, index) in items">
<span>{{fullNames[index]}}</span>
</p>
</div>
La manière dont Bill introduit fonctionne sûrement, mais nous pouvons le faire avec des accessoires calculés et je pense que c'est un meilleur design que method
en itérations, surtout quand l'application devient plus grande. De plus, computed
présente un gain de performances par rapport à method
dans certaines circonstances: http://vuejs.org/guide/computed.html#Computed-Caching-vs-Methods