Почему ag-Grid очищает фильтр после установки в onGridReady? - PullRequest
0 голосов
/ 27 февраля 2020

Я испытываю странное поведение, когда, если я устанавливаю модель фильтра в событии onGridReady, он удаляется после слов. Я регистрирую события filterChanged и вижу, что он вызывается, когда я устанавливаю фильтр, но он никогда больше не вызывается, хотя фильтр очищается без события изменения фильтра. когда я использовал сообщество, я не испытывал этого, но когда я обновился до предприятия и начал использовать setFilter, это начало происходить. есть идеи?

    onGridReady(params: ICellRendererParams): void {
        this.gridApi = params.api
        this.gridApi.sizeColumnsToFit()
        this.resetDefaults()
        window.addEventListener('resize', function() {
            setTimeout(function() {
                params.api.sizeColumnsToFit()
            })
        })
    }

    resetDefaults(): void {
        this.gridApi.setFilterModel({
            ColorStatus: {
                filterType: 'set',
                values: [ColorStatus.red.toString(), ColorStatus.yellow.toString()]
            }
        })
        this.gridApi.onFilterChanged(); //I've tried with and without this line
    }


Как ни странно, когда я устанавливаю сортировку в onGridReady, на модель сортировки это не влияет, только модели фильтров очищаются. Тем временем я переместил resetDefaults () в событие onFirstDataRendered, но это не идеально, потому что пользователь увидит все данные за мгновение до того, как они будут отфильтрованы.

Ответы [ 2 ]

0 голосов
/ 06 марта 2020

Мой коллега обнаружил, что добавление newRowsAction: 'keep' к filterParams рассматриваемой колонки решает проблему

0 голосов
/ 28 февраля 2020

Попробуйте использовать следующий подход вместо установки filterModel с использованием gridApi.setFilterModel.

  1. Получите экземпляр фильтра Column с помощью colId (установите его при определении ColDef)
  2. setModel с использованием экземпляра фильтра.
// define filterModel
const filterModel = {
   ColorStatus: {
      filterType: 'set',
      values: [ColorStatus.red.toString(), ColorStatus.yellow.toString()]
   }
};

const filterInstance = this.gridApi.getFilterInstance(colId); // <- ColorStatus column columnId
// you need to set it inside ColDef for this column

filterInstance.setModel(filterModel);
...