2016-11-22 75 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