Cara yang betul untuk membuat komponen kotak semak tersuai Vue
P粉135292805
P粉135292805 2023-09-02 18:22:50
0
1
504
<p>Cara membuat kotak pilihan tersuai dalam Vue. Apabila kotak semak berubah, ia harus memanggil fungsi. Saya mendapat ralat "Tidak dapat membaca 'id' harta yang tidak ditentukan" dan amaran "Ralat tidak terurus berlaku semasa pelaksanaan pengendali acara asli"</p> <p>Kotak semak tersuai:</p> <pre class="brush:js;toolbar:false;"><template> <div class="filter"> <masukan :ref="id" :id="id" type="kotak semak" class="filter-checkbox" @change="$emit('do', $emit)" /> <span>{{ label }}</span> </div> </template> <skrip> eksport lalai { nama: "Kotak Semak", alat peraga: { label: { jenis: Rentetan }, isSelected: { jenis: Boolean }, ID: { jenis: Rentetan } }, } </script></pre> <p>Saya mahu menggunakan ini dalam komponen induk: </p> <p> <pre class="brush:js;toolbar:false;"><Kotak Semak v-for="penapis penapis" :key="filter.id" :label="filter.name" :id="filter.id" v-model="filter.selected" @do="mutuallyExclusive(filter.id)" /></pra> </p>
P粉135292805
P粉135292805

membalas semua(1)
P粉343408929

Ralat yang tidak ditentukan dan tidak dikendalikan tidak boleh berulang dan anda perlu menyahpepijat lebih lanjut.

Tetapi anda memancarkan fungsi emit, yang pelik, dan nilainya sentiasa filter.id sama ada disemak atau tidak.

Anda mungkin mahu melakukan sesuatu seperti berikut:

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>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan