gpt4 book ai didi

angular - 为什么detectChanges方法会导致 "Attempt to use a destroyed view"错误?

转载 作者:行者123 更新时间:2023-12-03 12:23:28 25 4
gpt4 key购买 nike

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
如果你仍然想使用它,你也可以确保 observable 在销毁时取消订阅。

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

关于angular - 为什么detectChanges方法会导致 "Attempt to use a destroyed view"错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47787575/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com