• Как на vue3 создать multy-checkbox?

    0xD34F
    @0xD34F Куратор тега Vue.js
    Как засунуть значения выбранных чекбоксов в массив - рассказывается в документации.

    Значение для чекбокса "выбрать всё" будет вычисляемым. Ничего не выбрано - false, всё выбрано - true, для остальных вариантов undefined, при котором в true будет выставляться indeterminate. Также у него будет сеттер - если попытаться назначить true, то выбранными должны стать все чекбоксы; если false, то никто.

    Вот так:

    const items = ref([
      { id:  69, title:  'hello, world!!' },
      { id: 187, title:  'fuck the world' },
      { id: 666, title: 'fuck everything' },
    ]);
    
    const checked = ref([ 187 ]);
      
    const isAllChecked = computed({
      get: () => ({
        0: false,
        [items.value.length]: true,
      })[checked.value.length],
      set: val => checked.value = val ? items.value.map(n => n.id) : [],
    });

    <div>
      <label>
        <input
          type="checkbox"
          v-model="isAllChecked"
          :indeterminate.prop="isAllChecked === undefined"
        >
        <b>Check all</b>
      </label>
    </div>
    <div v-for="n in items" :key="n.id">
      <label>
        <input type="checkbox" v-model="checked" :value="n.id">
        {{ n.title }}
      </label>
    </div>
    Ответ написан
    3 комментария