• Как создать фильтрацию через select на vue 3 с composition api?

    0xD34F
    @0xD34F Куратор тега Vue.js
    Вот так:

    Компонент FilterBlock
    const status = defineModel('status');
    const statuses = [ 'all', 'alive', 'dead', 'unknown' ];

    <select v-model="status">
      <option v-for="n in statuses">{{ n }}</option>
    </select>

    Компонент СardList
    defineProps({
      data: {
        type: Array,
        default: () => [],
      },
    });

    <div v-for="n in data">
      <span :class="[ 'status', n.status ]"></span>
      ...
    </div>

    .status {
      border-radius: 50%;
      width: 30px;
      height: 30px;
    
      &.alive { background: green; }
      &.dead { background: red; }
      &.unknown { background: orange; }
    }

    Компонент App
    const data = ref([ ... ]);
    const status = ref('all');
    const filteredData = computed(() => status.value === 'all'
      ? data.value
      : data.value.filter(n => n.status === status.value)
    );

    <FilterBlock v-model:status="status" />
    <CardList :data="filteredData" />
    Ответ написан
    Комментировать
  • Как создать фильтрацию через select на vue 3 с composition api?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Стандартно. FilterBlock через v-model меняет значение фильтра в родительском компоненте, при его изменении пересчитывается computed с отфильтрованным списком, который передаётся параметром CardList.
    Ответ написан
    Комментировать