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