Таблица материалов: куда поместить инициализацию источника данных, чтобы сохранить состояние компонента при помощи маршрутизатора-выхода - PullRequest
0 голосов
/ 04 февраля 2020

Я использую 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 при переключении между маршрутами?

1 Ответ

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

Я реализовал решение с RouteReuseStrategy из принятого ответа в stackoverflow ссылка Это решило мою проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...