2016-11-22 4 views
0

Lassen Sie uns doppelte Instanzen des gleichen Objekts halten sagen, dass wir die folgenden Beziehungen in unserer Datenbank haben:AngularJS: Wie synchron

  • A Firma, dass Null für viele Mitarbeiter
  • Ein haben kann Mitarbeiter wird durch eine und nur eine Firma
  • Ein Mitarbeiter angestellt der Manager von null oder viele Mitarbeiter sein kann

... und die folgenden Einrichtungen in unserer Datenbank:

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 

..., die in dieser JSON Darstellung führen wird (in meinem Fall), wenn sie von NewtonSoft umgewandelt:

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

Wie Sie sehen können, gibt es zwei Instanzen des Mitarbeiters/Managers 'Jack Sparrow'. Wenn ich eine dieser Instanzen an die Benutzeroberfläche anbinde, möchte ich, dass beide Instanzen synchron bleiben, wenn Änderungen auftreten.

Gibt es in AngularJS v1 irgendeinen Mechanismus (oder Trick), der mir dabei helfen könnte?

Bitte beachten Sie, dass dies nur eine einfache Datenstruktur zur Veranschaulichung meines Problems ist. Man könnte argumentieren, dass das 'Manager'-Objekt nicht vollständig dargestellt werden sollte, aber in meinem Fall ist es ...

+0

Ihre Antwort scheint überflüssig zu sein. Können Sie nicht einfach Mitarbeiter einerseits und Manager andererseits zurückgeben? Dann sollte ein Mitarbeiter seine managerId so einstellen, dass Sie sie bei Bedarf finden können. – Maxime

+0

Ja, ich könnte wahrscheinlich in diesem Fall, aber in meinem realen Szenario ist das keine praktikable Option. – YonZo

Antwort

0

Ändern Sie Ihre Abfrage, so dass es die Manager Eigenschaft nicht zurückgibt. Passen Sie dann die Daten an, wenn Sie sie erhalten.

Ich nehme an, Ihr ManagerId Feld für Will Turner soll 1 sein (es ist 2 im JSON-Beispiel) in Ihrem Beispiel, um sich auf Jack Sparrow zu beziehen. Wenn dem so ist alles, was Sie brauchen, ist so etwas wie:

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

Natürlich brauchen Sie nicht einmal die Abfrage ändern nicht den Manager zurückkehren, können Sie einfach diesen Code ausführen, wenn Sie die Daten empfangen und die redundante überschreiben Managerdaten.

+0

Danke für den Vorschlag Duncan, aber das ist nicht wirklich eine Antwort auf die Frage: "Gibt es einen Mechanismus (oder Trick) in AngularJS v1, die mir helfen könnte, dies zu erreichen?" Aber ich denke, die Antwort ist "Nein" wirklich ... ;-) – YonZo

+0

Auch, danke für den Hinweis auf den Tippfehler in meiner Json-Probe. Es sollte jetzt in Ordnung sein ... – YonZo