我有一组不同的子视图,需要在某种条件下进行加载。一切正常,但是,我收到消息ViewDestroyedError: Attempt to use a destroyed view: detectChanges
。因此,我认为这导致在父负载下,所有视图都呈现一次。但是,只要条件满足视图的条件,就可能在声明尝试使用已破坏的视图之前就已经对其进行了渲染。
样本代码
<div class="parent>
<app-dropdown *ngSwitchCase="'dropdown'" [reply]="answer" (response)="myResponse($event)"></app-dropdown>
<app-select *ngSwitchCase="'select'" [reply]="answer" (response)="myResponse($event)"></app-select>
<app-input *ngSwitchCase="'input'" [reply]="answer" (response)="myResponse($event)"></app-input>
</div>
在上面的代码中,我通常会从API依次得到有关类型“选择”,“下拉”和“输入”的答复。或者它可能会动态更改顺序。但是,这里出现了ViewDestroyedError错误:尝试使用被破坏的视图:detectChanges。
我曾尝试添加ChangeDetectorRef,但它对我来说是新的,因此无法找到方法。我的孩子之一的代码如下。
export class DropdownComponent implements OnInit {
@Input() reply: any;
@Output() response = new EventEmitter();
constructor(private cdRef: ChangeDetectorRef) {
}
ngOnInit() {
if (this.reply.answerType === 'speciality') {
this.response.emit('Hello');
}
}
ngOnDestroy(): void {
}
}
我只是检查答复,如果符合条件,则发出答复。但是由于视图已经与其他组件一起呈现,因此获得了空白响应。我尝试也更改ngOnChange()
而不是ngOnInit
,但仍然是相同的问题。
[我认为您使用private cdRef: ChangeDetectorRef
进行的路径是正确的,但是正如我所使用的那样,在您知道视图已更改之后必须调用其detectChanges()
方法。