Séance 2 : Boucles et tests
Dernière mise à jour
Dernière mise à jour
Comme tous les langages, il est possible d'avoir des conditions/tests, des boucles en Vue.js. Bien que Vue.js soit un framework JavaScript, les boucles et tests peuvent être soit dans le script (et donc avec une syntaxe JavaScript classique), soit dans la partie template, et dans ce cas on utilise la syntaxe de Vue.js décrite ci-après.
v-if
La directive v-if
est utilisée pour restituer conditionnellement un bloc. Le bloc ne sera rendu que si l'expression de la directive retourne une valeur évaluée à vrai.
Dans cet exemple awesome
doit être une variable définie dans la partie script.
v-else
Vous pouvez utiliser la directive v-else
pour indiquer un bloc "sinon" lié à un v-if
:
Un élément v-else
doit immédiatement suivre un élément v-if
ou un élément v-else-if
sinon il ne sera pas reconnu.
Testez le code ci-dessus avec le bouton.
v-else-if
Le v-else-if
, comme son nom l'indique, sert de bloc "else if" lié à un v-if
. Il peut également être enchaîné plusieurs fois:
Similaire à v-else
, un bloc v-else-if
doit immédiatement suivre un bloc v-if
ou v-else-if
.
Définir 5 notes, et pour chacune indiquer en Vue.js si elles sont supérieures à 10 ou non.
Modifier le code pour différencier les notes entre 8 et 10
v-if
avec <template>
Puisque v-if
est une directive, elle doit être attachée à un seul élément. Mais que se passe-t-il si nous voulons basculer plus d'un élément ? Dans ce cas, nous pouvons utiliser v-if
sur un élément <template>
, qui sert de conteneur invisible. Le résultat du rendu final n'inclura pas l'élément <template>
.
v-else
et v-else-if
peuvent également être utilisés dans <template>
.
v-show
Une autre option pour afficher conditionnellement un élément est la directive v-show
. L'utilisation est sensiblement la même:
La différence est qu'un élément avec v-show
sera toujours rendu et restera dans le DOM; v-show
bascule uniquement la propriété CSS display
de l'élément.
v-show
ne prend pas en charge l'élément <template>
, et ne fonctionne pas avec v-else
.
v-if
vs. v-show
v-if
est un rendu conditionnel "réel" car il garantit que les écouteurs d'événements et les composants enfants à l'intérieur du bloc conditionnel sont correctement détruits et recréés lors des basculements.
v-if
est également paresseux : si la condition est fausse lors du rendu initial, il ne fera rien - le bloc conditionnel ne sera rendu que lorsque la condition deviendra vraie pour la première fois.
En comparaison, v-show
est beaucoup plus simple - l'élément est toujours rendu quelle que soit la condition initiale, avec un basculement basé sur CSS.
De manière générale, v-if
a des coûts de basculement plus élevés tandis que v-show
a des coûts de rendu initiaux plus élevés. Préférez donc v-show
si vous avez besoin de basculer quelque chose très souvent, et préférez v-if
si la condition est peu susceptible de changer à l'exécution.
v-for
Nous pouvons utiliser la directive v-for
pour rendre une liste d'items basée sur un tableau. La directive v-for
nécessite une syntaxe spéciale de la forme item in items
, où items
est le tableau de données source et item
est un alias pour l'élément du tableau sur lequel on itère :
À l'intérieur de la portée du v-for
, les expressions du template ont accès à toutes les propriétés de la portée du parent. De plus, v-for
supporte également un second et optionnel alias pour l'index de l'item actuel :
Donnera le résultat ci-dessous.
Parent - 0 - Foo
Parent - 1 - Bar
Pour les v-for
imbriqués, les portées fonctionnent de la même manière qu'avec les fonctions imbriquées. Chaque portée de v-for
a accès aux portées de ses parents :
v-for
avec un objetVous pouvez également utiliser v-for
pour itérer sur les propriétés d'un objet. L'ordre d'itération sera basé sur le résultat de l'appel à Object.keys()
sur l'objet :
Vous pouvez également fournir un second alias pour le nom de la propriété (aussi appelé clé) :
Et un autre pour l'index :
v-for
avec une portéev-for
peut également prendre un nombre entier. Dans ce cas il va répéter le template un certain nombre de fois, basé sur une portée 1...n
.
Notez qu'ici n
démarre avec une valeur initiale de 1
au lieu de 0
.
v-for
sur le <template>
Comme le modèle v-if
, vous pouvez aussi utiliser une balise <template>
avec v-for
pour effectuer le rendu d'un bloc composé de plusieurs éléments. Par exemple :
Définir un tableau en JavaScript et l'afficher avec une boucle dans le template.
Générez un tableau de 10 variables en JavaScript, et l'afficher dans le template
Pour chaque note indiquer si elle est supérieure à 10 (en ajoutant une class green pour la couleur de la texte) ou red pour une note inférieure à 10.
Extrait de la traduction de la page :