@angular/cdk/collections DataSource<T> 的断开连接方法没有被调用
The disconnect method of @angular/cdk/collections DataSource<T> is not being called
当我离开已经初始化它的页面时,自定义数据源的断开连接方法没有被调用。
我开发了自定义数据源,因此我可以使用 table 进行服务器排序和分页。
一切正常,在我的页面 ngOnInit 方法中使用新的 CustomDataSource() 初始化自定义数据源 class 时调用连接方法,但是当我离开页面时,断开连接方法,应该清理用过的科目,不叫。
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();
}
}
在@Maryannah 的帮助下,我可以在 ngOnDestroy 中调用 disconnect 方法,我在代码中唯一需要更改的是在我的组件中调用 ngOnDestroy 并使用 @ViewChild 装饰器公开 MatTable 组件。
@ViewChild(MatTable, {static: false}) table: MatTable<LogModel>;
ngOnDestroy(): void {
this.dataSource.disconnect(this.table);
}
如果您 "extend" 数据源 class,而不是使用 "implements",将自动调用断开连接方法。
class ProcessosLogsDataSource extends DataSource<LogModel> { ... }
当我离开已经初始化它的页面时,自定义数据源的断开连接方法没有被调用。
我开发了自定义数据源,因此我可以使用 table 进行服务器排序和分页。
一切正常,在我的页面 ngOnInit 方法中使用新的 CustomDataSource() 初始化自定义数据源 class 时调用连接方法,但是当我离开页面时,断开连接方法,应该清理用过的科目,不叫。
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();
}
}
在@Maryannah 的帮助下,我可以在 ngOnDestroy 中调用 disconnect 方法,我在代码中唯一需要更改的是在我的组件中调用 ngOnDestroy 并使用 @ViewChild 装饰器公开 MatTable 组件。
@ViewChild(MatTable, {static: false}) table: MatTable<LogModel>;
ngOnDestroy(): void {
this.dataSource.disconnect(this.table);
}
如果您 "extend" 数据源 class,而不是使用 "implements",将自动调用断开连接方法。
class ProcessosLogsDataSource extends DataSource<LogModel> { ... }