如何订阅 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 的文章可能就是您要查找的内容。

我们的想法是以每个 属性 都有自己的可观察对象的方式包装您的对象,并使用代理对象进行分配。

希望这能满足您的需求。