首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Angular 2 BehaviorSubjects是处理可变项目的正确方式吗?

Angular 2 BehaviorSubjects是处理可变项目的正确方式吗?
EN

Stack Overflow用户
提问于 2018-02-20 02:31:34
回答 1查看 186关注 0票数 0

我在Angular-Services中使用BehaviourSubjects来处理多个组件同时使用的项目。

但如果我有可变的项目(比如我的高级英雄之旅应用程序中的Herosets ),这个概念就不会像预期的那样工作。

My-Heroset-App:https://stackblitz.com/edit/angular-p3gouf

如果用户打开一个集合,Overview-Page会将特定项目设置为主题。如果用户打开另一个集合,他可以看到旧的集合,直到解析新的集合。

我解决了这个问题,但它看起来像是一种变通方法。

代码语言:javascript
复制
ngOnDestroy() { this.setHeroes(null); this.subscription.unsubscribe(); }

一个解析器也可以解决这个问题,但我不认为这对我来说是一个好方法。

有没有更好的方法来处理这件事?还有其他的概念吗?

谢谢

弗兰克

EN

回答 1

Stack Overflow用户

发布于 2018-02-20 03:20:56

是的,BehaviorSubjects在这方面是不好的(并且只在非常罕见的情况下是好的)。在这种情况下,您可以简单地将其替换为Observable.of(数据),因为在现实世界的应用程序中,您可能会从API获取数据作为观察值。

编辑:一些代码。抱歉,我用的是平板电脑,所以stackblitz不太起作用,写代码也有点痛苦。希望您能从中获得灵感:)

服务:

代码语言:javascript
复制
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.
}

组件:

代码语言:javascript
复制
heros$:Observable<Hero>;
chooseHeroSet(index:number) { 
   this.heros$ = this.service.getHeroSet(index);
}

第三方物流:

代码语言:javascript
复制
<div *ngFor="let hero of (heros$ | async)">{{hero.id}}</div>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48872203

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档