角(9)在组件之间共享公共状态

时间:2020-05-08 14:07:31

标签: javascript angular typescript

在当前(2020年)的Angular中,我有两个组件旨在通过服务共享activeProject的状态。我在ApplicationProjectService上定义了以下内容:

private activeProjectSource = new BehaviorSubject(undefined);
activeProject$ = this.activeProjectSource.asObservable();

set activeProject(v: any) {
  this.activeProjectSource.next(v);
}

get activeProject() {
  return this.activeProjectSource.value;
}

我在服务中使用BehaviorSubject,因为我希望组件在订阅时获得当前值而没有任何更改。 getter / setter之所以在那儿,是因为我直接对服务属性进行了其他绑定,因此不建议使用此方法。

两个同级组件最终可以追溯到一个公共父级,但是我没有使用@Input()@Output()或DOM中传递的任何参数:

this.appProjectService.activeProject$.subscribe(activeProject => {
  this.activeProject = activeProject;
});

每个组件都使用this.activeProject绑定到其各自组件中的[(ngModel)]属性:

<input type="checkbox" [(ngModel)]="activeProject.someProperty">

问题

如果每个组件获得了我认为是activeProjectthis.appProjectService.activeProject$.subscribe()的副本,那么在另一个组件中反映对本地属性的更改如何工作?最后,这是我想要的行为,但是我不明白为什么会起作用。在rxjs observables中是否存在一些我不理解的通过引用?

0 个答案:

没有答案