javascript - Angular 7 : ExpressionChangedAfterItHasBeenCheckedError while using Rxjs observbles

标签 javascript angular rxjs

我正在尝试使用 rxjs 主题在组件之间共享数据,并且我已在组件中使用该数据

Component.html

<div class="spinner-container"  *ngIf="loading">
      <div class="spinner-item">
          <nx-spinner nxSize="large"></nx-spinner>
      </div>
</div>  

组件.ts

ngOnInit(){
    setTimeout(()=>{
      this.commonService.spinnerTrigger.subscribe((trigger)=>{
        this.loading = trigger;
     })
    },100)
}

这是错误

ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked. Previous value: 'ngIf: false'. Current value: 'ngIf: true'.

我找到了使用 changeDetectref 的解决方法,但我认为没有其他方法可以解决此问题

最佳答案

您可以使用 ChangeDetectorRefdetectChanges() 方法手动触发更改检测

尝试这样:

从“@angular/core”导入{ChangeDetectorRef};

构造函数(私有(private)cdr:ChangeDetectorRef){}

ngOnInit(){
    setTimeout(()=>{
      this.commonService.spinnerTrigger.subscribe((trigger)=>{
        this.loading = trigger;
        if (this.cdr && !(this.cdr as ViewRef).destroyed) {
           this.cdr.detectChanges();
        }
     })
    },100)
}

关于javascript - Angular 7 : ExpressionChangedAfterItHasBeenCheckedError while using Rxjs observbles,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58503651/

相关文章:

javascript - javascript onclick 处理程序中的性能问题

javascript - 多于一个元素的classList.toggle问题

javascript - 如何在 Angular 5 中发布 XML 主体?

javascript - Node.js Streams 与 Observables

javascript - 如何使用 Behaviorsubject 检测变化

javascript - 如何检测 chrome 浏览器的 javascript 在 chrome 扩展应用程序中被禁用

javascript - CSS 悬停在 JQuery 循环的最后一条记录中不起作用

css - 需要为 Material Design 2 的 md-dialog-container 找到 CSS 选择器

使用 typescript 和 npm 将外部组件导入到 angular2 快速启动项目中

RxJS:即使在源 observable 上使用 `shareReplay()`, `throwError()` 也会为每个 observable 单独执行