Vue : construire une application web (école d'ingénieur) · Chapitre 7 · Application directe du cours
Un format de prix fourni
Communication entre composants · niveau 2
Énoncé
Un composant PrixLivre affiche un prix. La façon de le formater (devise, langue) doit être fournie par un ancêtre : l'application fournit un format en euros, une zone ZoneSuisse un format en francs suisses pour ses descendants. Sans fournisseur, le prix s'affiche « 8.5 € ». Écrire les trois composants.
Corrigé
export const cleFormatPrix = Symbol("formatPrix");
<script setup>
import { inject } from "vue";
import { cleFormatPrix } from "./cles.js";
defineProps({ prix: { type: Number, required: true } });
// Valeur par défaut : un format simple, si aucun ancêtre n'en fournit
const formater = inject(cleFormatPrix, (prix) => `${prix} €`);
</script>
<template>
<strong>{{ formater(prix) }}</strong>
</template>
<script setup>
import { provide } from "vue";
import { cleFormatPrix } from "./cles.js";
const format = new Intl.NumberFormat("fr-CH", { style: "currency", currency: "CHF" });
provide(cleFormatPrix, (prix) => format.format(prix));
</script>
<template>
<slot />
</template>
<script setup>
import { provide } from "vue";
import PrixLivre from "./PrixLivre.vue";
import ZoneSuisse from "./ZoneSuisse.vue";
import { cleFormatPrix } from "./cles.js";
const format = new Intl.NumberFormat("fr-FR", { style: "currency", currency: "EUR" });
provide(cleFormatPrix, (prix) => format.format(prix));
</script>
<template>
<p>France : <PrixLivre :prix="8.5" /></p>
<ZoneSuisse>
<p>Suisse : <PrixLivre :prix="8.5" /></p>
</ZoneSuisse>
</template>
France : 8,50 €
Suisse : 8.50 CHF
Le fournisseur le plus proche l'emporte : dans la zone suisse, c'est son format qui est injecté, et non celui de l'application. Ici, on fournit une fonction : elle ne change pas, une valeur ordinaire suffit.
100 % gratuit
La suite du chapitre est sur Adloun
- 9 autres exercices corrigés dans ce chapitre
- Les 2 QCM du chapitre, le premier sans compte
- Le tuteur, qui guide pas à pas sans donner la réponse
Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.