Adloun

Vue : construire une application web (école d'ingénieur) · Chapitre 1 · Application directe du cours

Expressions valides ?

Premiers pas avec Vue · niveau 2

Énoncé

Avec setup() { return { prix: 32, quantite: 2 }; }, lesquelles de ces interpolations sont acceptées ? Que se passe-t-il pour les autres ?


<ol id="app">
  <li>{{ prix * quantite }}</li>
  <li>{{ if (quantite > 0) { "oui" } }}</li>
  <li>{{ quantite > 0 ? "oui" : "non" }}</li>
  <li>{{ quantite = 5 }}</li>
  <li>{{ Math.max(prix, 40) }}</li>
  <li>{{ window.innerWidth }}</li>
</ol>

Corrigé

La page ne s'affiche pas du tout : la deuxième interpolation contient une instruction if, et c'est la compilation du gabarit entier qui échoue (le HTML produit est vide) :


[Vue warn]: Template compilation error: Error parsing JavaScript expression: avoid using JavaScript keyword as property name: "if"
1  |
2  |      <li>{{ prix * quantite }}</li>
3  |      <li>{{ if (quantite &gt; 0) { "oui" } }}</li>
   |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
4  |      <li>{{ quantite &gt; 0 ? "oui" : "non" }}</li>
5  |      <li>{{ quantite = 5 }}</li>
  at <App>
Uncaught SyntaxError: Unexpected token 'if'

Sans elle (sans-if.html), c'est le rendu qui échoue à son tour, cette fois à cause de window, qui ne fait pas partie des globales visibles dans un gabarit :


[Vue warn]: Property "window" was accessed during render but is not defined on instance.
  at <App>
[Vue warn]: Unhandled error during execution of render function
  at <App>
Uncaught TypeError: Cannot read properties of undefined (reading 'innerWidth')

Restent quatre expressions acceptées. Le produit et la condition ternaire sont des expressions ordinaires, et Math fait partie des globales autorisées. L'affectation quantite = 5 est elle aussi une expression, donc acceptée : avec seulement elle, le produit et Math.max (affectation.html), la liste affiche


"64"
"5"
"160"
"40"

L'affectation, exécutée pendant le rendu, a changé la valeur lue par la ligne suivante. Un gabarit qui modifie les données qu'il affiche est une erreur de conception : avec une donnée réactive, chaque modification déclencherait un nouveau rendu. Les calculs vont dans setup, le gabarit se contente de lire.

100 % gratuit

La suite du chapitre est sur Adloun

Exercice suivant et tuteur

Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant et tuteur →