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管道将自动订阅/取消订阅

07-27 13:43