Angular子级更新父级和ExpressionChangedAfterItHaHasBeenCheckedError

时间:2019-03-01 17:27:28

标签: angular angular7

因此,我了解在Angular上使用ExpressionChangedAfterItHasBeenCheckedError的“原因”,但是我只是无法根据正在阅读的文章弄清楚如何修复它。我所拥有的是这样定义一个可观察对象的服务:

private classification = new BehaviorSubject<string>('Assumed to be A');
public hazardClassification$ = this.classification.asObservable();

public setClassification(value: string): void {
    this.classification.next(value);
}

在确定值的子组件中,我通过ngOnInit对其进行设置:

ngOnInit(): void {
    this.hazardClassificationService.setClassification(this.hazardClassification);
    this.valueChanges = this.thisTabFormGroup.valueChanges.subscribe(() => this.hazardClassificationService.setClassification(this.hazardClassification));
}

在父组件中,我像这样抓取可观察的东西:

ngAfterContentChecked(): void {
    this.hazardClassification$ = this.hazardClassificationService.hazardClassification$;
}

,然后通过hazardClassification$ | async将其显示在父级的HTML中。

到目前为止,我一直尝试在父级ngOnInitngAfterContentCheckedngAfterContentInit中分配可观察对象。他们都不是正确的地方。

1 个答案:

答案 0 :(得分:0)

尝试在this.classification.next(value)内部致电setTimeout

public setClassification(value: string): void {
    setTimeout(() => {
        this.classification.next(value);
    });
}