Bonjour à tous,
Je debute avec la technologie VueJS et j'aurais besoin de votre aide.
Je suis en train de faire un petit projet pour pratiquer. J'ai crée une liste d'information avec un JSON en utilisant un v-for. Les informations remontent correctement jusque là pas de soucis. j'ai créer un composant "modal" qui va permettre d'afficher plus de details lorsque l'on clique sur un bouton present dans la boucle. Pour eviter d'avoir 50 modals. J'ai voulu avoir qu'une modal qui recupere les informations dans la liste , j'ai donc placé la balise du composent enfant "modal" en dehors de la boucle v-for.
Voici une version simplifier de mon code actuel :
<template>
<section class="villes-liste">
<div v-for="ville in villes" :key="ville.ID" class="ville">
<h2>{{ ville.titre }} </h2>
<h3>{{ ville.population }} </h3>
<button class="btn-modal" v-on:click="toggleModal()">Plus de details</button>
</div>
<modal v-bind:active="active" v-bind:detail="????????" v-bind:toggleModal="toggleModal" />
</section>
</template>
<script>
import reponse from "../json/villes.json";
import modal from '../components/modal.vue';
export default {
name: "villesliste",
components: {
modal,
},
data() {
return {
villes: JSON.parse(JSON.stringify(villes.ville)),
active: false,
};
},
methods: {
toggleModal: function () {
this.active = !this.active;
},
},
};
</script>
J'aimerais bien comprendre comment fonctionne les props et comment faire pour recupérer un ID pour mon composent enfant "modal" sachant qu'il n'est pas dans la boucle.
Merci d'avance pour votre aide,
Bonjour,
Tu n'as pas besoin d'un boolean pour la modal, tu peux juste remplacer
active: false
par
active: null
puis tu changes ta méthode :
toggleModal: function (ville) {
this.active = ville;
}
et dans le v-on-click :
<button class="btn-modal" v-on:click="toggleModal(ville)">Plus de details</button>
ensuite dans la modale :
<modal v-if="active" v-bind:detail="active" v-bind:toggleModal="toggleModal" />
Après, je n'ai pas testé, mais le principe, c'est de passer la ville cliquée à ta modale (d'ailleurs, il vaudrait mieux renommer active en selection par exemple)
et pour masque la modale, il suffit de faire
active=null
Petite update,
si j'ajoute :
v-on:click="toggleModal(ville.ID)"
et que dans ma fonction toggleModal fait :
toggleModal: function (prop) {
this.active = !this.active;
this.detail = prop;
console.log(this.detail);
},
le console log remonte bien l'ID de la ville mais l'information ne remonte pas jusqu'a l'enfant.
Merci beaucoup Gillesr !
Ton code a fonctionné ! Je vais également renommer mes elements pour avoir un code plus lisible et compréhensible !
Je te souhaite une bonne journée,