Error: ViewDestroyedError: Attempt to use a destroyed view: detectChanges at viewDestroyedError
当尝试通过使用组件中的detectChanges
方法来触发更改检测时,转到另一个页面时出现此错误。我发现使用markForCheck
方法不会收到错误消息。我知道这两种方法的区别,但是我不明白为什么detectChanges
在销毁过程中会导致此错误。有任何想法吗?
import { Component, ChangeDetectorRef, OnInit } from '@angular/core';
@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: [ './app.component.css' ]
})
export class ChildComponent implements OnInit {
data: any;
constructor(
private changeDetector: ChangeDetectorRef,
private somethingService: SomethingService
) {
}
ngOnInit() {
this.somethingService.getData().subscribe(data => {
this.data = data;
this.changeDetector.detectChanges();
});
}
}
最佳答案
无需致电detectChanges
如果仍要使用它,则还可以确保销毁该可观察对象。
serviceSubscription:any
ngOnInit() {
this.serviceSubscription = this.somethingService.getData().subscribe(data => {
this.data = data;
this.changeDetector.detectChanges();
});
}
ngOnDestroy() {
this.serviceSubscription.unsubscribe();
}
另一种方法是使用异步管道
ngOnInit() {
this.data$ = this.somethingService.getData();
}
与
<div *ngFor="let item of data$ | async">
(或类似)
async
管道将自动订阅/取消订阅