2016-11-22 36 views
0

比方说,我们已经在我们的数据库中的以下关系:Angularjs:如何保持同一对象的重复的实例同步

  • 一个公司,可以有0到多个员工
  • 员工由一个且只有一个公司聘请
  • 员工可以是零经理或许多员工

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

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} 
    } 
    ] 
} 

正如你所看到的,员工/经理'Jack Sparrow'有两个实例。 将这些实例中的一个绑定到UI时,如果发生更改,我希望两个实例保持同步。

在AngularJS v1中有没有任何机制(或技巧)可以帮助我实现?

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

+0

您的回复似乎多余。你不能只是一方面让员工回来,另一方面是经理人呢?然后,员工应该设置他的managerId,以便在需要时找到它。 – Maxime

+0

是的,我可能在这种情况下,但在我的真实情况下,这不是一个可行的选择。 – YonZo

回答

0

更改您的查询,以便它不会返回Manager属性。然后,只需在收到数据时修正数据。

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

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

当然,你甚至不需要更改查询不返回经理,你仍然可以只运行该代码时,您将收到的数据和覆盖冗余经理数据。

+0

感谢邓肯的建议,但这不是真正的问题答案: “AngularJS v1中是否有任何机制(或技巧)可以帮助我实现这一目标?” 但我想答案是“否”真的... ;-) – YonZo

+0

此外,谢谢指出我的json样本中的错字。现在应该可以... – YonZo