我有一个依赖于数据存储区的Angular2组件。 模板在该商店上有一些数据绑定,例如“{{datastore.weather.curTemp}}” 数据存储区不时通过http更新。
现在我明白这是以asnyc的方式工作 - 这是因为我的curTemp在新数据到达时不会自动更新,对吧?
我目前的解决方案是使用EventEmitter通知我的组件有关更改,但是我需要一个局部变量来绑定,如果我需要来自我的数据存储区的很多变量,我可能会变得混乱,或者我会在ChangeDetectorRef上调用detectChanges()。
我是否在正确的轨道上?或者我错过了填充asny-data的简单方法?
谢谢!
答案 0 :(得分:0)
解决问题的一种方法是让weather
成为Subject
:
datastore.service.ts
public weather: Subject<any> = new Subject(); // better make this private and expose it `asObservable` via a getter nethod
updateWeather(){
http.get(...).subscribe(res => this.weather.next(res.json()))
}
然后,您可以在component.ts中找到对它的引用:
public weather$: Observable<any>;
constructor (dataStore: DataStore){
this.weather$ = dataStore.weather;
}
并在您的模板中使用它:
{{(weather$ | async).curTemp}}
这样,当您的组件被销毁时,您也不需要处理订阅,因为异步管道会为您执行此操作。
答案 1 :(得分:0)
如果您的组件没有更新,可能您的异步线程在NgZone之外运行,您可能需要通过在组件的 NgZone 中进行分配来更新组件。
$dom = new DOMDocument;
$dom->loadHTMLFile('file.html');
$content = html_entity_decode($dom->saveXML());
$n = file_put_contents($file, $content) or die('file not found'); // write the contents back to the file
echo html_entity_decode($dom->saveXML());