TLDR:直到用户执行操作(例如,单击按钮)时,可观察对象才会触发组件重新渲染。Angular2 Observable not triggering rerendering
我正在更新由组件内注入的服务中包含的BehaviorSubject支持的observable。
在我的组件中,我使用简单的*ngIf="myObservable$ | async"
来显示div。
我设法复制2分的情况下,一个工作,一个是不,但我不明白有什么区别:
//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
});
整个流如何触发?你使用的是什么版本的angular2? - 你可以通过在'ngZone.run(...)'中包装'.next(true)'来解决你的问题 - 但是这对于简单的休息调用来说不是必须的,所以我目前的猜测是你的rest-call以某种方式包装在其他异步/外部触发器中 – olsn
我正在使用Angular 2.1.0。 我已经订阅了observable的组件调用了服务函数,它使得简单的http调用(不包含任何东西)。 – Yanis26
使用'subcribe()'块调用'.next()'的任何特定原因?订阅模块不应该用于产生副作用。只有观察者的最终消费者才能认购。 – AngularChef