У меня есть компонент, который выбирает сотрудников из магазина пиния, и компонент фильтра для фильтрации сотрудников по офису.
Когда я проверяю данные в Vue devtools, и selectedOffices
, и filteredEmployeeList
выглядят так, как ожидалось. Но список, отображаемый в компоненте (filteredEmployeeList), не соответствует данным, отображаемым в devtools.
Есть идеи?
Компонент
<template>
<div class = "employees">
<EmployeeCard
v-for = "(employee, idx) in filteredEmployeeList"
:key = "idx"
:employee-data = "employee"
/>
</div>
</template>
<script setup>
import { storeToRefs } from 'pinia';
import EmployeeFilter from '@/components/EmployeeFilter.vue';
import EmployeeCard from '@/components/EmployeeCard.vue';
import { useEmployeesStore } from '@/stores/employees';
const employeesStore = useEmployeesStore();
const { filteredEmployeeList } = storeToRefs(employeesStore);
</script>
Компонент фильтра
<div class = "filter-wrapper">
<div
v-for = "(office, idx) in employeesStore.offices"
class = "office-filter"
>
<label :for = "idx">
<input
v-model = "employeesStore.selectedOffices"
:value = "office"
class = "checkbox"
type = "checkbox"
>
{{ office }}
</label>
</div>
</div>
Магазин
const selectedOffices = ref([]);
const selectedFiltersLength = computed(() => {
return selectedOffices.value.length;
});
const filteredEmployeeList = computed(() => {
// No filters selected, return all employees
if (selectedFiltersLength.value == 0) {
return employees.value;
}
return employees.value.filter(employee => selectedOffices.value.includes(employee.office));
});
Не могли бы вы предоставить работающий минимально воспроизводимый пример? Используйте codeandbox или аналогичный.
Спасибо, нашел проблему. Как вы сказали, проблема с атрибутом :key. Изменен на employee.id, и он работает как шарм.
У вас есть удостоверение личности сотрудника? Я считаю, что проблема связана с idx, попробуйте это <EmployeeCard v-for = "employee in filteredEmployeeList" :key = "employee.id" :employee-data = "employee" />