2016-04-26 7 views
0

existiert Ich habe ein AngularJS Modell wie folgt aus:Überprüfen Sie, ob Modell in Winkel Bindung

$scope.model = {name: "Joe", isMale: true}; 

Nach Ansicht ich die model.isMale auf eine Checkbox binden.

Jetzt frage ich ein Backend für ein Update ($ http.get()). Im onSuccess-Callback weise ich einfach den Response-Wert $ scope.model zu. Wenn das Back-End mir nicht das gesamte Modell sendet, z.B. sendet das isMale-Flag nicht, das $ scope.model hat das Flag isMale nicht mehr. Wenn ich später den Namen beispielsweise in der Benutzeroberfläche ändere und diese Daten an das Backend sende, wird das Flag isMale nicht mehr an das Backend gesendet, da das Modell es nicht enthält. Gibt es eine Möglichkeit zu überprüfen, ob die Modellbindungen der Ansichtselemente existieren? Gibt es eine bessere Lösung als das Modell nur mit dem Wert zu überschreiben, den ich vom Backend bekomme?

Dank

Antwort

2

Sie können Ihr Modell und überschreiben Ihren Standardmodellwert mit dem aus api Antwort extend. Auf diese Weise wird Ihr Standard nur in api Reaktion vor, wenn das außer Kraft gesetzt werden:

angular.extend($scope.model, response) 

für flache Kopie oder

angular.merge($scope.model, response) 

für tiefe (rekursiv) kopieren

Dies sollte in arbeiten Sie Szenario

Und beziehen Sie sich auf die komplizierten Details des Unterschieds zwischen angular.copy(), 'angular.extend()' und angular.merge() hier: http://davidcai.github.io/blog/posts/copy-vs-extend-vs-merge/

+2

und verwenden Sie angular.merge, wenn Sie eine tiefe Kopie wünschen. – lastr2d2

+0

Benutzer angular.merge –