如何订阅rxjs

时间:2018-08-16 06:53:22

标签: angular typescript rxjs angular6 rxjs6

我真的对Angular和RxJS都是陌生的。我正在尝试创建一个Angular组件,该组件允许不同的对象共享树状数据集。

这是我想像的和简化的情况-将整个公司结构发布到服务器的Angular组件。此结构是多个“ StuffDto”对象的组合,这些对象互相引用作为其管理器。而且所有人员共享相同的公司部门结构图。

多层结构图如下:

  • 营销部
    • 销售部
      • 店内销售团队
      • 现场销售团队
    • 广告部
      • 策划团队
      • 设计师团队
  • 制造部
    • 研发部
      • 工程师团队
      • 研究团队
    • 质量检查部门
      • 检查组
      • 保证团队

这是我的StaffDto类,将在提交后直接发布到服务器上。

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”,我希望汤姆的ManagerId也将被更改。另外,如果我将Peter的assignedDept表格的“营销部”更改为“ R&D部”,由于在Peter的部门下没有Tom的“销售部”,Tom的assignedDept应该清除为空

我不太确定是否可以通过订阅RxJS来完成。我试图将_manager设为Subject,然后订阅它。但是,只有在分配了新的经理后,才会调用该函数,而不会更改经理的属性。

我想知道是否有一种方法可以在不更改太多代码的情况下进行操作。由于StuffDto将被传递到服务器,因此我将无法更改它。

1 个答案:

答案 0 :(得分:1)

如果我正确理解了这个问题,那么this @cartant的文章可能就是您想要的。

这个想法是要包装您的对象,使每个属性都有其自己的可观察对象,并使用代理对象进行分配。

我希望这符合您的需求。