假设我们的数据库中有以下关系:
...以及我们数据库中的以下实体:
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中是否有任何机制(或技巧)可以帮助我实现这一目标?
请注意,这只是一个简单的数据结构来说明我的问题。 有人可能会争辩说'经理'对象不应该被完全代表,但在我的情况下它是......
答案 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]);
}
});
当然,您甚至不需要更改查询而不是返回管理器,您仍然可以在收到数据时运行此代码并覆盖冗余管理器数据。