ngIf - 表达式在被检查后发生了变化

87

我有一个简单的场景,但是就是无法让它工作!

我在视图中显示一些文本,内容被限制在一个固定高度的框中。

这些文本是从服务器获取的,所以当文本到来时,视图会更新。

现在我有一个“展开”按钮,它有一个ngIf指令,如果框中的文本溢出,则ngIf指令应该显示按钮。

问题在于,由于文本在获取后会发生变化,所以当Angular的变更检测完成后,“展开”按钮的条件会变为true...

所以我会得到这个错误:表达式已经变更,检查后仍然改变了。之前值:'false'。当前值:'true'。

显然,按钮不会显示...

请查看此Plunker(检查控制台以查看错误...)

有什么办法可以让它正常工作吗?


2
请参考以下链接:https://github.com/angular/angular/issues/6005#issuecomment-165905348 - Michael Doye
11个回答

0
如果您正在使用BehaviorSubject在组件间共享值:

component.ts:

import { Observable } from 'rxjs/Observable';
import {tap, map, delay} from 'rxjs/operators';

private _user = new BehaviorSubject<any>(null);
user$ = this._user.asObservable();

Observable.of('response').pipe(
            tap(() =>this._user.next('yourValue'),
            delay(0),
            map(() => 'result')
          );

component.html:

<login *ngIf="!(dataService.user$ | async); else mainComponent"></login>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接