如何订阅 rxjs 中另一个对象中引用的对象的 属性 更改
How to subscribe to the property change of an object referenced within another object in rxjs
我对 Angular 和 RxJS 都很陌生。我正在尝试创建一个 Angular 组件,它允许不同的对象共享树结构数据集。
这是我想象的和简化的场景 - Angular 组件到 post 服务器的整个公司结构。这个结构是多个 "StuffDto" 对象的组合,它们相互引用作为它们的管理器。而且所有的东西共享同一张公司部门结构图。
多级结构图如下:
- 营销部
- 销售部
- 店内销售团队
- 现场销售团队
- 广告部
- 策划团队
- 设计师团队
- 制造部
- 研发部
- 工程师团队
- 研究员团队
- 质检部
- 督察组
- 保证团队
这是我的 StaffDto
class,提交后将直接 posted 到服务器。
export class StaffDto {
id: string;
name: string;
assignedDept?: string;
managerId?: string;
}
这是我的 Stuff
对象,它将在我的 Angular 应用程序中传递。
export class Stuff {
data: StuffDto;
_manager: Stuff;
get manager(): Stuff {
return this._manager;
}
set manager(manager: Stuff) {
this._manager = manager;
this.data.managerId = manager.data.id;
}
}
这适用于一些简单的场景,但不是所有场景。
如果我创建 Peter 和 Tom,则将 Peter 设置为 Tom 的经理。这是 2 StuffDto
个对象的样子。
{ id: abc01,
name: 'Peter',
assignedDept: 'Marketing Dept',
managerId: null }
{ id: abc02,
name: 'Tom',
assignedDept: 'Sales Dept',
managerId: 'abc01' }
如果我将 Peter 的 id
从 "abc01" 更改为 "abc01a",我希望 tom 的 ManagerId
也会更改。另外,如果我将 Peter 的 assignedDept
表单 "Marketing Dept" 更改为 "R&D Dept",因为 Peter 的部门下不会有 "Sales Dept" 分配给 Tom,Tom 的 assignedDept
应该是清零。
我不太确定这可以通过订阅 RxJS 来完成。我试过将 _manager
设为 Subject
然后订阅它。但是只有在分配新经理时才会调用该函数,而不是经理的 属性 更改。
我想知道是否有一种方法可以在不更改太多代码的情况下做到这一点。由于 StuffDto
将被传递到服务器,因此我无法更改它。
如果我对问题的理解正确,this @cartant 的文章可能就是您要查找的内容。
我们的想法是以每个 属性 都有自己的可观察对象的方式包装您的对象,并使用代理对象进行分配。
希望这能满足您的需求。
我对 Angular 和 RxJS 都很陌生。我正在尝试创建一个 Angular 组件,它允许不同的对象共享树结构数据集。
这是我想象的和简化的场景 - Angular 组件到 post 服务器的整个公司结构。这个结构是多个 "StuffDto" 对象的组合,它们相互引用作为它们的管理器。而且所有的东西共享同一张公司部门结构图。
多级结构图如下:
- 营销部
- 销售部
- 店内销售团队
- 现场销售团队
- 广告部
- 策划团队
- 设计师团队
- 销售部
- 制造部
- 研发部
- 工程师团队
- 研究员团队
- 质检部
- 督察组
- 保证团队
- 研发部
这是我的 StaffDto
class,提交后将直接 posted 到服务器。
export class StaffDto {
id: string;
name: string;
assignedDept?: string;
managerId?: string;
}
这是我的 Stuff
对象,它将在我的 Angular 应用程序中传递。
export class Stuff {
data: StuffDto;
_manager: Stuff;
get manager(): Stuff {
return this._manager;
}
set manager(manager: Stuff) {
this._manager = manager;
this.data.managerId = manager.data.id;
}
}
这适用于一些简单的场景,但不是所有场景。
如果我创建 Peter 和 Tom,则将 Peter 设置为 Tom 的经理。这是 2 StuffDto
个对象的样子。
{ id: abc01,
name: 'Peter',
assignedDept: 'Marketing Dept',
managerId: null }
{ id: abc02,
name: 'Tom',
assignedDept: 'Sales Dept',
managerId: 'abc01' }
如果我将 Peter 的 id
从 "abc01" 更改为 "abc01a",我希望 tom 的 ManagerId
也会更改。另外,如果我将 Peter 的 assignedDept
表单 "Marketing Dept" 更改为 "R&D Dept",因为 Peter 的部门下不会有 "Sales Dept" 分配给 Tom,Tom 的 assignedDept
应该是清零。
我不太确定这可以通过订阅 RxJS 来完成。我试过将 _manager
设为 Subject
然后订阅它。但是只有在分配新经理时才会调用该函数,而不是经理的 属性 更改。
我想知道是否有一种方法可以在不更改太多代码的情况下做到这一点。由于 StuffDto
将被传递到服务器,因此我无法更改它。
如果我对问题的理解正确,this @cartant 的文章可能就是您要查找的内容。
我们的想法是以每个 属性 都有自己的可观察对象的方式包装您的对象,并使用代理对象进行分配。
希望这能满足您的需求。