Załóżmy, że chciałem zrobić coś takiego, jak automatyczne uruchamianie kodu (np. Zapisywanie danych na serwerze) za każdym razem, gdy zmienią się wartości modelu. Czy jest to jedyny sposób, aby to zrobić, ustawiając coś podobnego ng-change
na każdej kontrolce, która mogłaby zmienić model?
Oznacza to, że w przypadku widoków rzeczy zmieniają się tak, jak zmienia się model, bez konieczności jawnego podłączania czegokolwiek. Czy istnieje analogia do możliwości uruchamiania kodu, który zapisuje na serwerze? Coś jak
myModel.on('change', function() {
$.post("/my-url", ...);
});
jak możesz zobaczyć z czymś w rodzaju kręgosłupa.
źródło
ng-change
punktów zaczepienia na kontrolkach wejściowych byłoby lepszym pomysłem?A jeśli chcesz stylizować elementy formularza zgodnie z ich stanem (zmodyfikowany / niezmodyfikowany) dynamicznie lub przetestować, czy niektóre wartości faktycznie się zmieniły, możesz użyć następującego modułu, opracowanego przeze mnie: https://github.com/betsol / kątowe wejście-zmodyfikowane
Dodaje dodatkowe właściwości i metody do formularza i jego elementów potomnych. Dzięki niemu możesz sprawdzić, czy jakiś element zawiera nowe dane, a nawet sprawdzić, czy cały formularz ma nowe niezapisane dane.
Możesz ustawić następujący watch:
$scope.$watch('myForm.modified', handler)
i twój program obsługi zostanie wywołany, jeśli jakieś elementy formularza faktycznie zawierają nowe dane lub jeśli został przywrócony do stanu początkowego.Możesz również użyć
modified
właściwości poszczególnych elementów formularza, aby faktycznie zmniejszyć ilość danych wysyłanych do serwera za pośrednictwem wywołania AJAX. Nie ma potrzeby przesyłania niezmienionych danych.Jako bonus możesz przywrócić swój formularz do stanu początkowego poprzez wywołanie
reset()
metody formularza .Demo modułu można znaleźć tutaj: http://plnkr.co/edit/g2MDXv81OOBuGo6ORvdt?p=preview
Twoje zdrowie!
źródło
<form name="myForm">
,<button ng-click="vm.doSomething(myForm)">
.FormController
dodoSomething()
funkcji twojego kontrolera. Możesz zrobić z nim cokolwiek chcesz w ramach tej funkcji, np. Sprawdzić, czy formularz został faktycznie zmodyfikowany, sprawdzającFormController.modified
właściwość boolowską.