Angular> 2主题直接订阅或使用方法?

时间:2017-07-20 08:25:18

标签: angular typescript rxjs

我有一个主题成员的服务。 Subject提供了一个类的实例:

public selectedProjectSubject: Subject<Project> = new Subject();

使用以下方法更新主题的值:

public updateSelectedProject(project: Project) {
    this.selectedProjectSubject.next(project);
  }

在几个课程中,我订阅了主题:

this.projectSubscription = this.projectService.selectedProjectSubject.subscribe((project: Project) => {
      this.projectSelected = project;
    });

直接订阅主题或向主题(可观察)提供其他方法是一种好习惯吗?

1 个答案:

答案 0 :(得分:0)

我在很多地方使用BehaviorSubject我想阻止我的队友在包含主题的服务之外使用.value,所以我通常会对所有主题执行以下操作:

private _selectedProject = new Subject<Project>();
get selectedProject(): Observable<Project> {
  return this._selectedProject;
}

然而,实际上并没有太多担心以它的方式访问它,如果你需要它,你可以随时改变我的方法,甚至不用只使用{{1}重构任何调用者访问者。