Manière correcte de créer un composant de case à cocher personnalisé Vue
P粉135292805
P粉135292805 2023-09-02 18:22:50
0
1
442
<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粉135292805
P粉135292805

répondre à tous(1)
P粉343408929

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>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!