Angular-有条件地处理父组件中的多个子组件

问题描述 投票:0回答:1

我有一组不同的子视图,需要在某种条件下进行加载。一切正常,但是,我收到消息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,但仍然是相同的问题。

angular components parent-child angular-changedetection
1个回答
0
投票

[我认为您使用private cdRef: ChangeDetectorRef进行的路径是正确的,但是正如我所使用的那样,在您知道视图已更改之后必须调用其detectChanges()方法。

© www.soinside.com 2019 - 2024. All rights reserved.