首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何订阅rxjs中另一个对象中引用的对象的属性更改

如何订阅rxjs中另一个对象中引用的对象的属性更改
EN

Stack Overflow用户
提问于 2018-08-16 06:53:22
回答 1查看 1.9K关注 0票数 1

我对角和RxJS都很陌生。我正在尝试创建一个角度组件,它允许不同的对象共享一个树结构的数据集。

这是我的场景,以一种想象和简化的方式-一个角度组件,将整个公司的结构张贴到服务器。这个结构是多个"StuffDto“对象的组合,它们相互引用作为它们的管理器。所有员工共享同一公司的部门结构图。

多层次结构图如下:

  • 市场部
    • 销售部
      • 店内销售团队
      • 现场销售团队

代码语言:javascript
运行
复制
- Advertisement Dept  
    - Planner Team
    - Designer Team

  • 制造部门
    • 研发部
      • 工兵队
      • 研究小组

代码语言:javascript
运行
复制
- QA Dept  
    - Inspector Team
    - Assurance Team

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

代码语言:javascript
运行
复制
export class StaffDto {
    id: string;
    name: string;
    assignedDept?: string;
    managerId?: string;
}

这是我的Stuff对象,它将在我的角度应用程序周围传递。

代码语言:javascript
运行
复制
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;
    }
}

这将在一些简单的场景中工作,但并不是所有的场景。

如果我创造了彼得和汤姆,那就让彼得做汤姆的经理。下面是两个StuffDto对象的样子。

代码语言:javascript
运行
复制
{ id: abc01,
  name: 'Peter',
  assignedDept: 'Marketing Dept',
  managerId: null }
{ id: abc02,
  name: 'Tom',
  assignedDept: 'Sales Dept',
  managerId: 'abc01' }

如果我把彼得的id从"abc01“改为"abc01a",我也会期望汤姆的ManagerId也会被修改。另外,如果我把彼得的assignedDept表格“市场部”改为“研发部”,因为在彼得的部门下面没有“销售部”来分配汤姆,汤姆的assignedDept应该被清除为空。

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

我想知道是否有办法做到这一点,而不改变太多的代码。由于StuffDto将被传递给服务器,所以我无法更改它。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-16 08:22:50

如果我正确理解这个问题, @cartant的文章可能就是您要找的东西。

其思想是以一种使每个属性都有自己的可观察性的方式包装对象,并使用代理对象进行赋值。

我希望这能满足你的需要。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51871190

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档