我在Angular-Services中使用BehaviourSubjects来处理同时使用多个组件的项目。
但如果我有可更改的项目(例如我的高级英雄游览应用程序中的Herosets),这个概念并没有按预期工作。
My-Heroset-App:https://stackblitz.com/edit/angular-p3gouf
如果用户打开一个Set,则Overview-Page将特定项目设置为Subject。如果用户打开另一个集合,他可以看到旧集合,直到解决了新集合。
我解决了这个问题,但它看起来像是一种解决方法。
ngOnDestroy() { this.setHeroes(null); this.subscription.unsubscribe(); }
解析器也会解决这个问题,但我认为这对我来说不是一个好方法。
有没有更好的方法来解决这个问题?还有另一个概念吗?
感谢
弗兰克
答案 0 :(得分:0)
是的,BehaviorSubjects对此不利(仅适用于非常罕见的情况)。在这种情况下,您可以简单地用Observable.of(数据)替换它,就像在现实世界的应用程序中一样,您可能会将API中的数据作为可观察数据。
编辑:一些代码。对不起,我在平板电脑上,所以stackblitz不能正常工作,编写代码有点痛苦。希望你能从中得到这个想法:)
服务:
private heroSets = [ [{id:1}], [{id:2}] ];
getHeroSet (index:number):Observable<Hero> {
return Observable.of(this.heroSets[index]);
// Simulated api call. In real world,
// usually return a call to HttpClient ie. this.http.get(...),
// and you won't need to change any other code.
}
组件:
heros$:Observable<Hero>;
chooseHeroSet(index:number) {
this.heros$ = this.service.getHeroSet(index);
}
TPL:
<div *ngFor="let hero of (heros$ | async)">{{hero.id}}</div>