2017-10-12 2 views
2

J'ai une liste de filtres en utilisant les cases à cocher. J'essaie de faire de chaque case à cocher ses propres composants. Donc, je boucle dans ma liste de filtres en ajoutant un composant case à cocher pour chaque filtre. Le Vue.js documentation dit que si j'ai plusieurs cases à cocher qui utilisent le même modèle, ce tableau sera mis à jour avec la valeur des cases à cocher. Je vois cela fonctionner si le groupe de cases à cocher fait partie du composant parent. Mais si je coche la case d'un composant et que j'ajoute chaque composant checkbox dans une boucle, le modèle ne se met pas à jour comme prévu.Vue.js case à cocher composant plusieurs instances

Comment puis-je avoir un composant checkbox qui met à jour un tableau sur le parent? Je sais que je peux le faire en émettant un événement pour une méthode sur le composant qui met à jour le tableau mais la documentation de Vue donne l'impression que le framework le fait pour vous.

Voici un exemple de code que j'ai joué avec https://www.webpackbin.com/bins/-KwGZ5eSofU5IojAbqU3

+1

Veuillez inclure le code approprié dans le message lui-même, pas seulement un lien vers celui-ci. – thanksd

Répondre

2

est ici une version de travail.

<template> 
    <div class="filter-wrapper"> 
    <input type="checkbox" v-model="internalValue" :value="value"> 
    <label>{{label}}</label> 
    </div> 
</template> 

<script> 
    export default { 
    props: ['checked','value', 'label'], 
    model: { 
     prop: "checked" 
    }, 
    computed:{ 
     internalValue: { 
     get(){return this.checked}, 
     set(v){this.$emit("input", v) } 
     } 
    } 
    } 
</script> 

Mise à jour bin.

+0

Génial, merci pour cela. S'il vous plaît laissez-moi savoir si je comprends comment cela fonctionne. Vous créez un modèle interne pour le composant et définissez sa valeur sur le modèle transmis depuis le parent. Est-ce que je comprends cela correctement? –

+0

@MichaelTurnwall Vous l'avez. Et lorsque le modèle interne change, le changement est émis au parent. – Bert