Angular2 Observable不会触发重新渲染

时间:2017-01-24 18:35:22

标签: angular rxjs observable rxjs5 behaviorsubject

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

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

在我的组件中,我使用简单的*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
});

2 个答案:

答案 0 :(得分:0)

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

中执行此操作
this.http.get(url)
.map( res => res.json() )
.do( () => this._mySubject$.next(true))
.subscribe();

答案 1 :(得分:0)

最好在ngOnInit方法中订阅行为主题,并设置要在ngIf中使用的属性。由于实际对象不是新对象,只是来自行为主体的新发射,因此可能不会触发Angular的变化检测。它似乎与不可变对象一起发挥最佳效果。