Angularjs:如何保持同一对象的重复实例同步

时间:2016-11-22 09:05:19

标签: angularjs json

假设我们的数据库中有以下关系:

  • 公司,可以拥有零到多名员工
  • 员工由一个且只有一个公司
  • 雇用
  • 员工可以是零或多名员工的经理

...以及我们数据库中的以下实体:

Company: Id=1, Name='Contoso'
Employee: Id=1, CompanyId:1, ManagerId= Null, Name='Jack Sparrow', Salary=1000
Employee: Id=2, CompanyId:1, ManagerId= 1, Name='Will Turner', Salary=900

...在NewtonSoft转换时会产生(在我的情况下)这个JSON表示:

{
  Id: 1,
  Name: 'Contoso',
  "Employees": [
    {Id:1, CompanyId:1, ManagerId: null, Name: 'Jack Sparrow', Salary:1000},
    {Id:2, CompanyId:1, ManagerId: 1, Name: 'Will Turner', Salary:900, 
      Manager:{Id:1, CompanyId:1, ManagerId: null, Name: 'Jack Sparrow', Salary:1000}
    }
  ]
}

正如您所看到的,有两个Employee / Manager'Jack Sparrow'实例。 将其中一个实例绑定到UI时,如果发生更改,我希望两个实例保持同步。

AngularJS v1中是否有任何机制(或技巧)可以帮助我实现这一目标?

请注意,这只是一个简单的数据结构来说明我的问题。 有人可能会争辩说'经理'对象不应该被完全代表,但在我的情况下它是......

1 个答案:

答案 0 :(得分:0)

更改您的查询,使其不返回Manager属性。然后只需在收到数据时修复数据。

我假设Will Turner的ManagerId字段应该是1(在JSON示例中为2),在您的示例中引用Jack Sparrow。如果是这样,您只需要:

angular.forEach(employees, function(emp) {
    if(emp.ManagerId !== null) {
        emp.Manager = employees[emp.ManagerId]);
    }
});

当然,您甚至不需要更改查询而不是返回管理器,您仍然可以在收到数据时运行此代码并覆盖冗余管理器数据。