Метод отсоединения @ angular / cdk / Collection DataSource <T>не вызывается - PullRequest
0 голосов
/ 23 сентября 2019

Метод отключения пользовательского источника данных не вызывается, когда я покидаю страницу, которая его инициализировала.

Я разработал пользовательский источник данных, чтобы использовать таблицу с сортировкой и разбиением на страницы сервера.

Все работает хорошо, подключенный метод вызывается, когда пользовательский класс DataSource инициализируется с помощью нового CustomDataSource () в моем методе ngOnInit моей страницы, но когда я выхожу со страницы, метод отсоединения, который должен очистить используемыйпредметы, не называется.

class SomeComponent implements OnInit, OnChanges, AfterViewInit {
  ngOnInit(): void {
     this.dataSource = new CustomDataSource(this.logService, 
     this.mensagemService);
  }
}

class ProcessosLogsDataSource implements DataSource<LogModel> {
  private logsSubject = new BehaviorSubject<LogModel[]>([]);
  private loadingSubject = new BehaviorSubject<boolean>(false);
  private lengthSubject = new BehaviorSubject<number>(0);
  public loading$ = this.loadingSubject.asObservable();
  public length$ = this.lengthSubject.asObservable();

  constructor(
      private logService: LogService,
      private mensagemService: MensagemService) { }

  connect(collectionViewer: CollectionViewer): Observable<ProcessoLogModel[]> { // is being called when the dataSource is being initialized in the SomeComponent ngOnInit method
      return this.logsSubject.asObservable();
  }

  disconnect(collectionViewer: CollectionViewer): void {// not being called
      this.logsSubject.complete();
      this.loadingSubject.complete();
      this.lengthSubject.complete();
  }
}

1 Ответ

0 голосов
/ 23 сентября 2019

После помощи @Maryannah я мог вызвать метод разъединения в ngOnDestroy, единственное, что мне нужно было изменить в моем коде, это вызвать ngOnDestroy в моем компоненте и открыть компонент MatTable с помощью декоратора @ViewChild.

@ViewChild(MatTable, {static: false}) table: MatTable<LogModel>;

ngOnDestroy(): void {
  this.dataSource.disconnect(this.table);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...