0
我在想如果我可以解决没有主题的以下方案。我有两个组件:第一个组件创建一个英雄,另一个组件显示一个英雄。这些组件通过服务进行通信。目前,我有以下解决方案:Angular 2通过服务进行通信而不使用主题
英雄创造
@Component({
selector: 'hero-creation',
....
})
export class HeroCreation{
constructor(private heroSercice: HeroService){
}
onClick(){
this.heroSercice.addHero();
}
}
英雄服务
@Injectable()
export class HeroService {
public hero$: Subject<string> = new Subject<string>();
constructor() {
}
public addHero(hero: string): void {
this.hero$.next(hero);
}
}
英雄显示
@Component({
selector: 'hero-display',
....
})
export class HeroDisplay{
constructor(private heroSercice: HeroService){
//Use async pipe in template to display the hero
this.heros$ = this.heroSercice.hero$
}
}
目标是仅使用普通Observables实现相同的功能而不使用主题。
既然你添加新的英雄'这是基于一些用户操作addHero()'我不认为你能避免使用课程。 – martin
你能否说出你为什么要这样做?因为事情是,你不能简单地发送数据在任何observable上 - 在技术上我会猜测其他方式,但我不会推荐这些。 - 如果你不想坚持纯rxjs看看ngrx – olsn
理论上你可以使用'Observable.fromEvent().map()'而不是Angular的'(click)',但这会让事情变得更加复杂。 – martin