javascript - Angular2 中的 'rxjs/Subject' 是什么?

标签 javascript angular rxjs

<分区>

我正在通过这个 official cookbook 学习 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);
  }
}

最佳答案

Observable 只允许订阅,而 Subject 允许发布和订阅(一个主题是一个 observable)。因此,使用 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))
  }
}

现在每个想要订阅任务宣布事件的人都可以订阅。 ComponentOne 将发出任务宣布事件。

Why "missionAnnounced$" doesn't have a variable declaration?

确实如此。 missionAnnounced$ 是变量名,以其可观察的形式分配给 Subject。类成员变量不要使用let

What is the logic of the below code?

订阅者订阅可观察对象($ 变量),而发布者调用announceMissionconfirmMissionmissionAnnounced$missionConfirmed$ 的所有订阅者将分别收到这些事件。

关于javascript - Angular2 中的 'rxjs/Subject' 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40325856/

相关文章:

javascript - 需要根据 jquery 中的选择框值每 X 秒刷新一次页面

html - Angular 2 typescript :How to show dropdown list based on radio buttons backend values

angular - 有什么方法可以根据到达的值检查或不检查复选框吗? Angular

javascript - 在 AngularJS 中使用 ng-style 和百分比值设置 HTML 元素宽度

javascript - <选项> Mobile Safari 中的事件 <选择> 列表>

RxJS 6/tap 运算符何时发出值

angular - rxjs observable subscribe 什么时候同步执行?

redux - rxjs 触发并行请求,并等待其中一个请求完成并更新

javascript - 如何从对象 Javascript 数组中检索花费的最高时间

angular - 在组件初始化之前执行 GET 请求