角度11变化检测问题



我的html视图中有一种情况,我正在更新材质滑块的绑定,如下所示:

<mat-slider
[disabled]="isLoading || (isUpdating$ | async)"
color="primary"
min="0"
max="100"
step="1"
[ngModel]="myService.thresholdvalue$ | async"
(change)="maskChanged($event)"
></mat-slider>

但是,当我的儿童组件通过this.thresholdValueSub.next(value(调用服务进行更新时,我得到了经典的更改检测错误:

ERROR Error: NG0100: ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked. Previous value: 'undefined'. Current value: '3'

在我看来,我以为我可以使用async来解决这个问题,但我错了:

[ngModel]="myService.maskThreshold$ | async"

然后我想我会如下运行更改检测(当值更新时,在我的父组件上(:

ngOnInit(): void {
this.subscriptions
...
.add(this.myService.thresholdValue$.subscribe(res => {
this.thresholdValue = res;
if (res !== undefined) {
this.changeDetector.markForCheck();
}
}));
}

又错了!我仍然收到更改检测错误。

我应该发布更多的代码以使其更清晰吗?

谢谢。

********更新*********

从html中删除异步管道,因为我已经在ts文件中进行了子处理:

<mat-slider
[disabled]="isLoading || (isUpdating$ | async)"
color="primary"
min="0"
max="100"
step="1"
[(ngModel)]="mosaicService.maskThreshold$"
(change)="maskChanged($event)"
></mat-slider>

订阅时运行更改检测:

.add(this.mosaicService.maskThreshold$.subscribe(res => {
this.maskValue = res;
if (res !== undefined) {
this.changeDetector.detectChanges();
}
})

不再有更改检测错误!:-(

我最终删除了HTML中的async管道,因为我已经订阅了ts文件。所以我的错误是订阅了两次-(

因此,有了这一行代码的变更检测器,我就可以走了!

this.changeDetector.detectChanges();

相关内容

  • 没有找到相关文章

最新更新