Как сбросить состояние :checked во Vue 3?

Как можно настроить сброс фильтров на начальные значения при нажатии кнопки, при этом сохраняя состояние фильтров, если они были активированы?
  • 24 января 2024 г. 21:50
Ответы на вопрос 2
Во Vue 3, для сброса состояния `:checked` чекбоксов или радио кнопок, можно использовать моделирование (data binding) для управления состоянием этих элементов управления. Например, если у вас есть чекбокс, который связан с реактивной переменной `isChecked`, вы можете программно изменить эту переменную, чтобы сбросить отметку чекбокса.

Для примера, у вас есть следующий компонент:

```vue
<template>
  <input type="checkbox" v-model="isChecked" />
  <button @click="resetFilters">Reset Filters</button>
</template>

<script>
import { ref } from 'vue';

export default {
  setup() {
    const isChecked = ref(false);

    function resetFilters() {
      isChecked.value = false;
    }

    return { isChecked, resetFilters };
  }
};
</script>
```

В приведенном примере `isChecked` - это реактивная переменная, связанная с чекбоксом. При нажатии на кнопку "Reset Filters" вызывается метод `resetFilters`, который устанавливает `isChecked` в `false`, что сбрасывает чекбокс в неотмеченное состояние.

Если у вас есть несколько фильтров и вы хотите их сбросить, у вас может быть объект или массив, который хранит состояния каждого фильтра. В таком случае можно просто пройтись по этому объекту или массиву и сбросить каждый фильтр в его начальное состояние. Вот пример с объектом:

```vue
<template>
  <!-- Предполагается что у нас есть несколько чекбоксов связанных с фильтрами -->
  <div v-for="(value, key) in filters" :key="key">
    <input type="checkbox" v-model="filters[key]" /> {{ key }}
  </div>
  <button @click="resetFilters">Reset Filters</button>
</template>

<script>
import { reactive } from 'vue';

export default {
  setup() {
    const initialFiltersState = {
      filter1: false,
      filter2: false,
      filter3: false
    };

    const filters = reactive({ ...initialFiltersState });

    function resetFilters() {
      Object.keys(initialFiltersState).forEach(key => {
        filters[key] = initialFiltersState[key];
      });
    }

    return { filters, resetFilters };
  }
};
</script>
```

Здесь объект `filters` содержит состояния для каждого фильтра. В методе `resetFilters` мы просто итерируемся по ключам начального состояния фильтров и присваиваем каждому ключу в `filters` его начальное значение.

Таким образом вы сможете сбросить все фильтры в их начальное состояние и, в то же время, сохранять состояние фильтров при их активации.
Снизу вверх изменения отслеживаются, а сверху вниз - нет, состояние дочерних компонентов никак не зависит от родителя. 

Вырезать обработчики события change и, соответственно, методы filtered; свойства currentPriority и currentStopsId сделать вычисляемыми - геттеры возвращают значение параметра, сеттеры отправляют новое значение родителю:

Похожие вопросы