Les démonstrations de ce TD se basent sur les sources disponibles ci-dessous :
Attention, seul le répertoire src
est dans l'archive. Il faut donc créer un projet avec vue-cli
et remplacer son répertoire src
.
Dans le premier TP, on utilise un store vuex
afin de créer un dépôt central de données, que se partagent tous les composants.
Cependant, toutes les données applicatives n'ont pas besoin d'être totalement partagées. Dans bien des cas, il y a juste besoin qu'un composant père donne des valeurs à un composant fils.
Par exemple, on imagine aisément un composant faisant office de barre de navigation dont les items lui seraient fournis par son père.
Ce passage de valeurs se fait grâce au principe des props, sous-entendu les propriétés du composant fils, dont le père peut fixer la valeur.
Les props restent malgré tout des variables locales à un composant, comme celle de data
. Elles ne sont donc pas accessibles directement à l'extérieur du composant.
Pour définir des variables de type props d'un composant, il suffit d'ajouter dans la partie script
un champ nommé props
, dont la valeur est :
String
, Number
, Boolean
, Array
, Object
, Function
, ...)La deuxième syntaxe est à privilégier car elle permet d'avoir des messages d'alerte dans la console lorsque le composant parent donne une valeur du mauvais type à une props.
title
et show
:<script>
...
export default {
name: 'MyComponent',
props: { title: String, show: Boolean },
data: () => ({ ... }),
...
}
</script>
On utilise les props comme les variables de data
: avec leur nom dans <template>
ou bien leur nom précédé de this.
dans la partie <script>
.
Pour fixer leur valeur dans le composant parent, cela se passe lorsque l'on utilise la balise permettant de créer le composant fils. On donne simplement une valeur à un attribut portant le nom de la props.
Du point de vue du parent, la props est donc un attribut du fils.
Pour fixer la valeur de l'attribut représentant la props, cela fonctionne comme avec les autres attributs. On peut :
oneprop="hello"
,v-bind
. Par exemple : v-bind:oneprop="myvar"
Modifier la valeur d'une props est normalement interdit, bien que cela soit possible. Dans ce cas, on a un message d'alerte dans la console. De plus, sauf exception, si une props est modifiée, cette modification ne sera pas répercutée dans le composant parent.