Nic*_*.Xu 10 javascript rxjs angular
我正在通过这本官方食谱学习Angular2 .
以下代码突然出现.为什么"missionAnnounced $"没有变量声明?让missionAnnounced $ = ...下面代码的逻辑是什么?
import { Injectable } from '@angular/core';
import { Subject } from 'rxjs/Subject';
@Injectable()
export class MissionService {
// Observable string sources
private missionAnnouncedSource = new Subject<string>();
private missionConfirmedSource = new Subject<string>();
// Observable string streams
missionAnnounced$ = this.missionAnnouncedSource.asObservable();
missionConfirmed$ = this.missionConfirmedSource.asObservable();
// Service message commands
announceMission(mission: string) {
this.missionAnnouncedSource.next(mission);
}
confirmMission(astronaut: string) {
this.missionConfirmedSource.next(astronaut);
}
}
Run Code Online (Sandbox Code Playgroud)
Pau*_*tha 21
一个Observable只允许用于订阅,而Subject允许两者发布和订阅(受试者是可观察到的).因此,使用a Subject可以将您的服务用作发布者和订阅者.
@Component({})
class ComponentOne {
constructor(private service: MissionService) {}
onClick() {
service.announceMission('mission started');
}
}
@Component({})
class ComponentTwo {
constructor(private service: MissionService) {
service.missionAnnounced$.subscribe(mission => console.log(mission))
}
}
@Component({})
class ComponentThree {
constructor(private service: MissionService) {
service.missionAnnounced$.subscribe(mission => console.log(mission))
}
}
Run Code Online (Sandbox Code Playgroud)
现在,每个想要订阅宣布任务的人都可以订阅.该ComponentOne会是一个发射任务宣布事件.
为什么"missionAnnounced $"没有变量声明?
确实如此.missionAnnounced$是变量名称,Subject以其可观察的形式分配.类成员变量不使用let
以下代码的逻辑是什么?
订阅者订阅了observable($变量),而发布者调用了announceMission和confirmMission.所有订阅者missionAnnounced$和missionConfirmed$分别将收到这些活动.
| 归档时间: |
|
| 查看次数: |
13334 次 |
| 最近记录: |