Adloun

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

Options objets

Formulaires · niveau 2

Énoncé

Que montre la page après le choix du « Petit Prince » ? Quelle est la valeur de l'attribut value des options dans le DOM, et pourquoi cela n'a-t-il pas d'importance ?


<div id="app">
  <div>
    <label>Livre
      <select v-model="choisi">
        <option :value="null">— choisir —</option>
        <option v-for="l in livres" :key="l.isbn" :value="l">{{ l.titre }}</option>
      </select>
    </label>
    <p v-if="choisi">{{ choisi.titre }} : {{ choisi.prix }} €, ISBN {{ choisi.isbn }}</p>
    <p>{{ choisi === livres[1] }}</p>
  </div>
</div>

const { createApp, ref } = Vue;

createApp({
  setup() {
    const livres = [
      { isbn: "9782956300014", titre: "Programmation Java", prix: 32 },
      { isbn: "9782956300052", titre: "Le Petit Prince", prix: 8.5 },
    ];
    return { livres, choisi: ref(null) };
  },
}).mount("#app");

Corrigé

Le texte de la page après le choix, puis la valeur des options dans le DOM :


Livre 
— choisir —
Programmation Java
Le Petit Prince
Le Petit Prince : 8.5 €, ISBN 9782956300052
false
"— choisir —" "[object Object]" "[object Object]"

:value="l" lie l'objet lui-même : la donnée choisi donne accès au titre, au prix et à l'ISBN du livre choisi. La comparaison avec le second livre affiche pourtant false : une ref qui reçoit un objet le rend réactif en profondeur, et contient donc un proxy de l'objet (chapitre 3), qui n'est pas l'objet d'origine. Pour comparer des objets, on compare leur identifiant (isbn), jamais leur référence. Dans le DOM, l'attribut ne peut contenir qu'une chaîne, d'où « [object Object] » ; mais Vue garde de son côté le lien entre chaque option et sa valeur, et ne lit jamais cet attribut.

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 →