Я использую Angular 8 и таблицу данных материала с различными фильтрами, как в этом примере Это находится внутри компонента, к которому я перемещаюсь через выход-маршрутизатор с одним небольшим отличием, я инициализирую источник данных в ngAfterViewInit и назначить данные из API для this.dataSource.data в конце блока для достижения максимальной производительности, как рекомендовано здесь
ngAfterViewInit() {
this.dataSource.sort = this.sort;
this.dataSource.paginator = this.paginator;
this.dataSource.filterPredicate = (record, filter: any) => {
let result = true;
let keys = Object.keys(record); // keys of the object data
for (const key of keys) {
let searchCondition = filter.conditions[key]; // get search filter method
if (searchCondition && searchCondition !== 'none') {
if (filter.methods[searchCondition](record[key], filter.values[key]) === false) { // invoke search filter
result = false // if one of the filters method not succeed the row will be remove from the filter result
break;
}
}
}
return result
};
this.apiService.getLogsNested().subscribe(logsFromApi => {
this.dataSource.data = logsFromApi;
this.isLoadingResults = false;
});
console.log('logs ngAfterViewInit');
}
Проблема заключается в том, что когда я фильтрую что-то в компонент с таблицей данных, а затем переключаться между различными маршрутами / компонентами каждый раз, когда я go возвращаюсь к своему компоненту с таблицей данных. Я не вижу отфильтрованных результатов, поскольку он повторно инициализируется при переключении между маршрутами. Я подтвердил, что в таком случае вызывается ngAfterViewInit. Можно ли как-то сохранить состояние компонента dataTable при переключении между маршрутами?