我在Angular-Services中使用BehaviourSubjects来处理多个组件同时使用的项目。
但如果我有可变的项目(比如我的高级英雄之旅应用程序中的Herosets ),这个概念就不会像预期的那样工作。
My-Heroset-App:https://stackblitz.com/edit/angular-p3gouf
如果用户打开一个集合,Overview-Page会将特定项目设置为主题。如果用户打开另一个集合,他可以看到旧的集合,直到解析新的集合。
我解决了这个问题,但它看起来像是一种变通方法。
ngOnDestroy() { this.setHeroes(null); this.subscription.unsubscribe(); }一个解析器也可以解决这个问题,但我不认为这对我来说是一个好方法。
有没有更好的方法来处理这件事?还有其他的概念吗?
谢谢
弗兰克
发布于 2018-02-20 03:20:56
是的,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);
}第三方物流:
<div *ngFor="let hero of (heros$ | async)">{{hero.id}}</div>https://stackoverflow.com/questions/48872203
复制相似问题