作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我浏览了很多 SO 帖子,试图找到解决这个问题的方法,我发现唯一一个有 hack 实现的帖子。我也订阅了来自 ngrx 商店的 observable:
this.navigationSelected$ = this.store.pipe(select(currentlySelectedNavigation));
this.navigationSelected$.subscribe(res => {
...
});
使用 ngIf 取决于模板内的这个可观察值:
<profile-navigation *ngIf="(navigationSelected$ | async) == navigationLayout[0].location"></profile-navigation>
只要 navigationSelected$ 的值发生变化,就会抛出:
ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked. Previous value: 'ngIf: [object Object]'. Current value: 'ngIf: false'.
并且模板不会更新。我设法通过运行 cdRef.detectChanges(); 绕过它。在订阅结束时。它工作正常,但错误仍然被抛出,而且如上所述,它似乎是一个 hack。
实现我想要做的最好的方法是什么?
最佳答案
我通常添加一个 debounceTime(0) 来解决这个问题。
this.navigationSelected$ = this.store.pipe(select(currentlySelectedNavigation), debounceTime());
关于angular - ExpressionChangedAfterItHasBeenCheckedError : Expression has changed after it was checked - How to update template after Observable Value change,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56582208/
我是一名优秀的程序员,十分优秀!