Maison  >  Questions et réponses  >  le corps du texte

Manière correcte de créer un composant de case à cocher personnalisé Vue

<p>Comment créer une case à cocher personnalisée dans Vue. Lorsque la case à cocher change, elle doit appeler la fonction. J'ai eu l'erreur "Impossible de lire la propriété 'id' non définie" et avertissement "Une erreur non gérée s'est produite lors de l'exécution d'un gestionnaire d'événements natif"</p> <p>case à cocher personnalisée :</p> <pre class="brush:js;toolbar:false;"><template> <div class="filtre"> <entrée :ref="id" :id="id" tapez="case à cocher" classe = "filtre-case à cocher" @change="$emit('faire', $emit)" /> <span>{{ label }}</span> </div> </modèle> <script> exporter par défaut { nom : "case à cocher", accessoires : { étiquette: { tapez : chaîne }, est sélectionné: { tapez : booléen }, identifiant: { tapez : chaîne } }, } </script></pre> <p>Je souhaite utiliser ceci dans un composant parent : </p> <p> <pre class="brush:js;toolbar:false;"><case à cocher v-for="filtre de filtres" :key="filtre.id" :label="filtre.nom" :id="filtre.id" v-model="filter.selected" @do="mutuellementExclusif(filter.id)" /></pré> </p>
P粉135292805P粉135292805383 Il y a quelques jours446

répondre à tous(1)je répondrai

  • P粉343408929

    P粉3434089292023-09-03 00:21:00

    Les erreurs non définies et non gérées ne peuvent pas se reproduire et vous devez déboguer davantage.

    Mais vous émettez la fonction d'émission, ce qui est bizarre, et la valeur est toujours filter.id qu'elle soit cochée ou non.

    Vous voudrez peut-être faire quelque chose comme ce qui suit :

    new Vue({
      el: '#app',
      components: {
        'Checkbox': {
          template: '#checkbox-template',
          props: {
            label: {
              type: String,
              default: ''
            },
            value: {
              type: Boolean,
              default: false
            },
            id: {
              type: String,
              default: ''
            }
          }
        }
      },
      data: () => ({
        filters: [{
          id: 1,
          name: 'a',
          selected: true,
        },{
          id: 2,
          name: 'b',
          selected: false,
        }]
      }),
      methods: {
        mutuallyExclusive(value) {
          console.log(value)
        }
      }
    })
    <div id="app">
      <Checkbox 
        v-for="filter of filters" 
        :key="filter.id" 
        :label="filter.name" 
        :id="filter.id" 
        v-model="filter.selected" 
        @change="mutuallyExclusive" 
      />
    </div>
    
    <template id="checkbox-template">
      <div class="filter">
        <input 
          :ref="id" 
          :id="id" 
          type="checkbox" 
          class="filter-checkbox"
          :checked="value"
          @change="$emit('change', {value:$event.target.checked, id})" 
        />
        <span v-if="label">{{ label }}</span>
      </div>
    </template>
    
    <script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.14/vue.min.js"></script>

    répondre
    0
  • Annulerrépondre