Angenommen, ich wollte so etwas wie automatisch Code ausführen (z. B. Daten auf einem Server speichern), wenn sich die Werte eines Modells ändern. Ist die einzige Möglichkeit, dies zu tun, indem Sie ng-change
für jedes Steuerelement etwas festlegen, das möglicherweise das Modell ändern könnte?
Das heißt, mit Ansichten ändern sich die Dinge richtig, wenn das Modell geändert wird, ohne dass explizit etwas angeschlossen werden muss. Gibt es ein Analogon zur Ausführung von Code, der auf einem Server gespeichert wird? Etwas wie
myModel.on('change', function() {
$.post("/my-url", ...);
});
wie Sie vielleicht mit so etwas wie Rückgrat sehen.
quelle
ng-change
Hooks an Eingabesteuerelementen zu einer besseren Idee machen würde?Wenn Sie Ihre Formularelemente entsprechend ihrem Status (geändert / nicht geändert) dynamisch formatieren oder testen müssen, ob sich einige Werte tatsächlich geändert haben, können Sie das folgende von mir entwickelte Modul verwenden: https://github.com/betsol / Winkeleingabe modifiziert
Es fügt dem Formular und seinen untergeordneten Elementen zusätzliche Eigenschaften und Methoden hinzu. Mit ihm können Sie testen, ob ein Element neue Daten enthält, oder sogar testen, ob das gesamte Formular neue nicht gespeicherte Daten enthält.
Sie können die folgende Überwachung einrichten:
$scope.$watch('myForm.modified', handler)
und Ihr Handler wird aufgerufen, wenn einige Formularelemente tatsächlich neue Daten enthalten oder wenn sie in den Ausgangszustand zurückkehren.Sie können auch die
modified
Eigenschaft einzelner Formularelemente verwenden, um die Datenmenge zu reduzieren, die über einen AJAX-Aufruf an einen Server gesendet wird. Es ist nicht erforderlich, unveränderte Daten zu senden.Als Bonus können Sie Ihr Formular per Aufruf der Formularmethode in den Ausgangszustand
reset()
zurückversetzen.Die Demo des Moduls finden Sie hier: http://plnkr.co/edit/g2MDXv81OOBuGo6ORvdt?p=preview
Prost!
quelle
<form name="myForm">
,<button ng-click="vm.doSomething(myForm)">
.FormController
auf diedoSomething()
Funktion Ihres Controllers über. Innerhalb dieser Funktion können Sie alles tun, was Sie wollen, z. B. überprüfen Sie, ob das Formular tatsächlich geändert wurde, indem Sie dieFormController.modified
boolesche Eigenschaft überprüfen .