2014-12-24 13 views
7

W angularjs, czy istnieje sposób, aby zaznaczyć formularz, który został już przekazany jako cofnąć z (tak, to traci ng-submitted klasaforma Oznacz jako cofnąć z w angularjs

Tło:

W moim CSS, I „m z wykorzystaniem kątowych klas walidacyjnych wykonać następujące czynności.

  • Początkowo wszystkie wejścia mają normalny kolor obramowania
  • Jeżeli użytkownik zmieni wejścia mieć nieprawidłowe wartości określić kolor obramowania na czerwono.
  • Jeśli użytkownik kliknie przycisk przesyłania, ustaw kolor obramowania wszystkich nieprawidłowych wejść na czerwony.

mi zrealizować to tak:

input.ng-dirty.ng-invalid, .ng-submitted .ng-invalid { 
    border-color: #F00; 
} 

który działa dobrze. Teraz mam formularz, który wysyła żądanie asynchroniczne, a jeśli serwer odpowiada statusem sukcesu, chcę wyczyścić formularz (i skutecznie zresetować go do stanu pierwotnego). Problem polega na tym, że po wyczyszczeniu formularza nadal ma on klasę .ng-submitted, więc wszystkie wymagane pola mają czerwoną ramkę. Jednak chcę, aby wszyscy mieli normalną granicę.

Powinienem być w stanie zaznaczyć wszystkie pola jako nieskazitelne przy użyciu $setPristine(), ale nie widzę żadnego sposobu, aby oznaczyć formularz jako odrzucony. Czy to możliwe, czy też muszę stworzyć i utrzymywać własną klasę do robienia tego?

Odpowiedz

8

Możesz zresetować swój formularz, a tym samym oznaczyć go jako unsubmitted, używając poniższego fragmentu.

HTML:

<input type="button" ng-click="reset(form)" value="Reset" /> 

kątowa Scenariusz:

$scope.reset = function(form) { 
    if (form) { 
     form.$setPristine(); 
     form.$setUntouched(); 
    } 
    $scope.user = angular.copy($scope.master); 
    }; 

ta została podjęta z https://docs.angularjs.org/guide/forms

+1

myślę tylko 'forma $ setPristine();' jest potrzebne.. – PSL

+1

Dzięki! Nie zdawałem sobie sprawy, że 'forma. $ SetPristine()' ustawia również '$ submitted' na 'false'. Nadal będę używał 'form. $ SetUntouched()', ponieważ formularz powinien być technicznie uważany za nietknięty. Jednak nie będę używał rzeczy '$ scope.user', ponieważ wygląda to tak, jak w przypadku przykładu, do którego się odwołujesz. –

+0

Bez problemu. Wiedziałem, że '$ scope.use' jest nieistotne, ale nie chciałem uszkodzić integralności tego fragmentu. Cieszę się, że ci pomogło. –