Guide
Essentiel
- Installation
- Introduction
- Instance de Vue
- Syntaxe de template
- Propriétés calculées et observateurs
- Liaisons de classes et de styles
- Rendu conditionnel
- Rendu de liste
- Gestion des évènements
- Liaisons sur les champs de formulaire
- Composants
Composants en détail
- Création de composants
- Props
- Ãvènements personnalisés
- Slots
- Composants dynamiques et asynchrones
- Gérer les cas limites
Transitions & animation
- Transitions d'entrée, de sortie et de liste
- Transitions d'état
Réutilisabilité & composition
- Mixins
- Directives personnalisées
- Fonctions de rendu et JSX
- Plugins
- Filtres
Outils
- Composants monofichiers
- Testing
- Support de TypeScript
- Déploiement en production
Ãvolutions
- Routage
- Gestion de l'état
- Rendu côté serveur
- Security
Mécanismes
- Réactivité en détail
Migration
- Migration depuis Vue 1.x
- Migration depuis Vue Router 0.7.x
- Migration depuis Vuex 0.6.x à 1.0
Meta
- Comparaison avec les autres frameworks
- Rejoignez la communauté Vue.js !
- Rencontrer l'équipe
Youâre browsing the documentation for v2.x and earlier. For v3.x, click here.
Propriétés calculées et observateurs
Propriétés calculées
Les expressions dans le template sont très pratiques, mais elles sont uniquement destinées à des opérations simples. Mettre trop de logique dans vos templates peut les rendre trop verbeux et difficiles à maintenir. Par exemple :
|
à ce stade, le template nâest ni simple ni déclaratif. Vous devez le regarder pendant une seconde avant de réaliser quâil affiche message
dans le sens inverse. Le problème sâaggrave lorsque vous souhaitez inclure le message inversé plusieurs fois dans votre template.
Câest pourquoi vous devriez utiliser des propriétés calculées pour toute logique complexe.
Exemple basique
|
|
Résultat :
Message original : "{{ message }}"
Message inversé calculé : "{{ reversedMessage }}"
Ici, nous avons déclaré une propriété calculée reversedMessage
. La fonction que nous avons fournie sera utilisée comme une fonction accesseur (getter) pour la propriété vm.reversedMessage
:
|
Vous pouvez ouvrir la console et jouer vous-même avec lâexemple de vm. La valeur de vm.reversedMessage
dépend toujours de la valeur de vm.message
.
Vous pouvez lier des données aux propriétés calculées dans les templates comme une propriété normale. Vue est au courant que vm.reversedMessage
dépend de vm.message
, donc il mettra à jour toutes les liaisons qui dépendent de vm.reversedMessage
lorsque vm.message
changera. Et le mieux dans tout cela est que nous avons créé cette relation de dépendance de façon déclarative : la fonction de lâaccesseur calculé nâa pas dâeffets secondaires, ce qui la rend facile à tester et à comprendre.
Mise en cache dans computed
vs methods
Vous avez peut-être remarqué que nous pouvons accomplir le même résultat en invoquant une méthode dans lâexpression :
|
|
Au lieu dâune propriété calculée, nous pouvons définir la même fonction en tant que méthode. Pour le résultat final, les deux approches sont en effet exactement les mêmes. Cependant, la différence est que les propriétés déclarées dans computed
sont mises en cache selon leurs dépendances. Une propriété calculée sera réévaluée uniquement quand certaines de ses dépendances auront changé. Cela signifie que tant que message
nâa pas changé, les multiples accès à la propriété calculée reversedMessage
retourneront immédiatement le résultat précédemment calculé sans avoir à réexécuter la fonction.
Cela signifie également que la propriété calculée suivante ne sera jamais mise à jour, parce que Date.now()
nâest pas une dépendance réactive :
|
En comparaison, une invocation de méthode exécutera toujours la fonction à chaque fois que se produira un redéclenchement du rendu.
Pourquoi avons-nous besoin de mettre en cache ? Imaginez que nous avons une propriété calculée coûteuse A, qui exige une boucle dans un énorme tableau et qui fait beaucoup de calculs. Alors nous pouvons avoir dâautres propriétés calculées qui dépendent à leur tour de A. Sans la mise en cache, nous exécuterions lâaccesseur de A autant de fois que nécessaire ! Dans les cas où vous ne souhaitez pas la mise en cache, utilisez une méthode à la place.
Propriétés calculées vs observées
Vue fournit une façon plus générique dâobserver et de réagir aux changements de données sur une instance de Vue : les propriétés watch. Quand vous avez des données quâil faut changer selon dâautres données, il est tentant dâabuser de watch
(surtout si vous venez du monde dâAngularJS). Toutefois, il est souvent préférable dâutiliser une propriété calculée et non une fonction de rappel impérative comme watch
. Considérez cet exemple :
|
|
Le code ci-dessus est impératif et répétitif. Comparez-le avec une version de propriété calculée :
|
Câest mieux, nâest-ce pas ?
Mutateur calculé
Les propriétés calculées ont par défaut uniquement un accesseur, mais vous pouvez également fournir un mutateur (setter) quand vous en avez besoin :
|
Maintenant, lorsque vous exécutez vm.fullName = 'John Doe'
, le mutateur sera invoqué, vm.firstName
et vm.lastName
seront mis à jour en conséquence.
Observateurs
Bien que les propriétés calculées soient plus appropriées dans la plupart des cas, parfois un observateur personnalisé est nécessaire. Câest pour cela que Vue fournit une façon plus générique de réagir aux changements de données à travers lâoption watch
. Ceci est très utile lorsque vous souhaitez exécuter des opérations asynchrones ou coûteuses en réponse à des données changeantes.
Par exemple :
|
|
Résultat :
Posez votre question (réponse par Oui ou Non) :
{{ answer }}
Dans ce cas, lâutilisation de lâoption watch
nous permet dâeffectuer une opération asynchrone (accéder à une API), de limiter la fréquence dâexécution de cette opération et de définir des états intermédiaires jusquâà ce que nous obtenions une réponse finale. Rien de tout cela ne serait possible avec une propriété calculée.
En plus de lâoption watch
, vous pouvez aussi utiliser lâAPI vm.$watch.