2013-05-16 12 views
9

Ich erstelle einen Web-Client, der mit einer Einstellung Web-API mit eckigen arbeitet. Es gibt viele Einstellungen und sie sind alle optional. Wenn ich eine Einstellung sende, sollte sie gespeichert werden. Einstellungen, die nicht gesendet werden, sollten sich nicht ändern.Winkelform - senden nur geänderte Felder

Die Anforderung besteht darin, eine Schaltfläche Änderungen speichern für alle Einstellungen zu haben.

Ich frage mich, ob es einen Weg in Angular gibt, dies zu implementieren.

Ich dachte nicht HTML form zu verwenden und die Daten zu sammeln und eine Ajax-Anfrage von mir selbst zu erstellen, aber dann werde ich den Validierungsmechanismus verlieren (der mit Angular-UI validate gut funktioniert).

Ich dachte daran, das Formular in kleine Formulare aufzuteilen und nur die Formulare zu senden, in denen ng-dirty nicht falsch ist, aber dies kann eine teilweise Sicherung verursachen, wenn einige Anfragen fehlschlagen (und dies ist gegen die Anforderung).

Irgendeine Idee?

Antwort

6

In der Angular-Dokumentation gibt es ein Beispiel, das ng-copy abdeckt, um eine Reset-Funktion zu implementieren.

http://docs.angularjs.org/cookbook/advancedform

einreichen Während Sie Ihr Startmodell an die veränderte/eingereichten Objekt (geändert Kopie) und legt nur die geänderten Elemente (oder nur löschen diejenigen, die gleich/unverändert) (Masterkopie) vergleichen könnte.

Diff die Kopie und Master mit http://blog.vjeux.com/2011/javascript/object-difference.html Dies erfordert zusätzliche Arbeit, um Arrays zu behandeln. Oder konvertieren zu JSON und diff die JSON https://github.com/benjamine/JsonDiffPatch

+0

das ist nicht das, was ich gesucht habe, aber ich denke, das bedeutet, dass eckige bietet diese Funktionalität nicht aus der Box. Danke. –

+2

Das erfindet das Rad neu - Angular FormController und ngModel führen bereits Dirty Checks durch, fügen Klassen hinzu und speichern diese Informationen in $ scope. Siehe Antwort von r4w87173 –

+0

@ ArturBodera Was ist, wenn ich diesen Prozess automatisieren möchte? Es scheint, als ob ich Eingabenamen und Modellattribute verfolgen muss. (Ich frage tatsächlich). – keyser

17

Sie können überprüfen, ob das Formular oder ein benanntes Feld vor dem Senden geändert wird. Wenn die Form hat einen Namen und Ihre Eingaben haben Namen wie:

<form name="myForm"> 
    <input name="input1"> 
</form> 

In der Steuerung werden Sie Zugriff auf das Objekt haben $scope.myForm und $scope.myForm.input1, und diese Objekte eine $dirty Eigenschaft haben, die, wenn der ursprüngliche Wert true war vom Benutzer geändert.

Verwandte Themen