【发布时间】:2020-05-08 14:07:31
【问题描述】:
在当前 (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;
});
每个组件都使用[(ngModel)] 绑定到各自组件中的this.activeProject 属性:
<input type="checkbox" [(ngModel)]="activeProject.someProperty">
问题
如果每个组件都获得了我认为是activeProject 到this.appProjectService.activeProject$.subscribe() 的副本,那么一个组件中本地属性的更改会反映在另一个组件中是如何工作的?最后这是我想要的行为,但我不明白为什么它会起作用。 rxjs observables 中是否有一些我不理解的引用传递?
【问题讨论】:
-
我建议,访问这个 youtube 视频 youtube.com/… 您将确切了解如何在 angular 中使用主题
-
我浏览了那个视频,它似乎与我从其他地方找到的内容相匹配,并且大部分都已实现。我认为我的问题不止于此,我想知道为什么我的代码在使用 Subject、Observable 和各种绑定时会执行它的功能。
标签: javascript angular typescript