У меня есть настраиваемый компонент фильтра для столбца в моей сетке. Я заметил, что компонент фильтра не создается, пока я не щелкну значок фильтра в заголовке столбца. Это означает, что данные не фильтруются в соответствии с моими настройками по умолчанию (например, фильтровать записи, где status == StatusEnum.Complete
).
В качестве обходного пути я обнаружил, что могу получить экземпляр фильтра в событии onGridReady
, вызвав api.getFilterInstance('status')
, и это вызывает создание компонента фильтра и, таким образом, применение фильтрации по умолчанию.
Этот обходной путь кажется немного неуклюжим. Переменная filter
не используется в событии onGridReady
, которое вызывает предупреждения в среде IDE / build. Другой разработчик может прийти и удалить эту строку кода, посчитав это ненужным.
Есть ли лучший способ принудительно создать экземпляр моего настраиваемого фильтра при создании сетки? Я использую AgGrid 17.1 и Angular 4.4.
Сетка настроена так:
gridOptions: GridOptions = {
enableFilter: true,
onGridReady: (event) => {
let filter = event.api.getFilterInstance("status"); // forces the filter component to be constructed
let data = this.loadAsyncData();
event.api.setRowData(data);
},
columnDefs: [
...
{
headerName: "Status",
field: "status",
filterFramework: MyCustomStatusFilterComponent,
filterParams: {
valueGetter: (obj) => { return obj.data.statusEnum; },
hideCompleteByDefault: true,
...
}
},
....
]
}
Я создал пример, демонстрирующий проблему. Обратите внимание на «взлом» в строке 63 app.component.ts
.