Angularjs:如何保持同一对象的重复的实例同步
问题描述:
比方说,我们已经在我们的数据库中的以下关系: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中有没有任何机制(或技巧)可以帮助我实现?
请注意,这只是一个简单的数据结构来说明我的问题。 有人可能会争辩说,'经理'对象不应该充分代表,但在我的情况下...
答
更改您的查询,以便它不会返回Manager
属性。然后,只需在收到数据时修正数据。
我假设你的ManagerId
字段的Will Turner应该是1(在JSON示例中是2),在你的例子中是指Jack Sparrow。如果是这样你需要的是这样的:
angular.forEach(employees, function(emp) {
if(emp.ManagerId !== null) {
emp.Manager = employees[emp.ManagerId]);
}
});
当然,你甚至不需要更改查询不返回经理,你仍然可以只运行该代码时,您将收到的数据和覆盖冗余经理数据。
您的回复似乎多余。你不能只是一方面让员工回来,另一方面是经理人呢?然后,员工应该设置他的managerId,以便在需要时找到它。 – Maxime
是的,我可能在这种情况下,但在我的真实情况下,这不是一个可行的选择。 – YonZo