Таблица данных PrimeVue

Если я добавлю:lazy="true" к как показано ниже:

<DataTable :value="cars" :lazy="true" :filters="filters" :paginator="true" :rows="10"
    :totalRecords="totalRecords" sortMode="multiple" :loading="loading" @page="onPage($event)">

фильтр столбца и сортировка не работают

Пример кода: https://www.primefaces.org/primevue/

Как сделать так, чтобы фильтр и сортировка работали с: lazy as true?

Jobby

2 ответа

Вам необходимо настроить одно правило для каждого столбца с данными, например, для таблицы студентов (id, name), и добавить имя свойства поля json для связанного столбца в:globalFilterFields.

      <Datatable :filters="filters" :globalFilterFields="[ 'id', 'name' ]">
  <Column field="id" header="ID"/>
  <Column field="name" header="Name"/>
</Datatable>

...

const filters = ref({
  global: { value: null, matchMode: FilterMatchMode.CONTAINS},
  id: { value: null, matchMode: FilterMatchMode.EQUALS},
  name: { value: null, matchMode: FilterMatchMode.CONTAINS},
});

Таким образом, вы указываете DataTable фильтровать идентификатор и имя столбца, используя определенные правила, просто не забудьте использовать правильный mactchMode для фильтрации чисел, дат или строк, FilterMatchMode.CONTAINS используется со строками.

Когда я пробовал отложенную загрузку (на стороне сервера) и глобальную фильтрацию, я понял, что генератор событий :filters не работает.

Побродив по их машинописному файлу, я наткнулся на команду, как во фрагменте

          /**
     * Event to emit after filtering, not triggered in lazy mode.
     * @param {DataTableFilterEvent} event - Custom filter event.
     */
    filter(event: DataTableFilterEvent): void;

Поэтому я думаю, что если вы попытаетесь прослушать событие изменения глобальных фильтров, у вас нет шансов, хотя вы можете использовать v-модель для двусторонней привязки строки поиска.

Пример в их документе выглядит так, как будто работает фильтр отдельных столбцов.

Другие вопросы по тегам