-1

TLDR:可观察对象在用户做出操作之前不会触发组件重新渲染(例如单击按钮)。

我正在更新一个由 BehaviorSubject 支持的 observable,该 BehaviorSubject 包含在注入到我的组件中的服务中。

在我的组件中,我使用一个简单*ngIf="myObservable$ | async"的来显示一个 div。

我设法复制了两种情况,一种有效,另一种无效,但我不明白有什么区别:

//CASE 1
this._mySubject$.next(true); //THIS DOES TRIGGER RERENDERING
//CASE 2
this.http.get(url)
.map( res => res.json() )
.subscribe( body => {
    this._mySubject$.next(true); //THIS DOESN'T TRIGGER RERENDERING UNTIL AN ACTION IS MADE
});
4

2 回答 2

0

在 ngOnInit 方法中订阅行为主题并设置要在 ngIf 中使用的属性可能是一个更好的主意。由于实际对象不是新对象,只是行为主体的新发射,它可能不会触发 Angular 的更改检测。它似乎最适合不可变对象。

于 2017-01-26T04:50:55.077 回答
0

如果您需要做副作用,请尝试在do运算符中进行

this.http.get(url)
.map( res => res.json() )
.do( () => this._mySubject$.next(true))
.subscribe();
于 2017-01-24T22:33:32.800 回答