Jakie są różnice między ng-pristine
i ng-dirty
? Wygląda na to, że możesz mieć jedno i drugie true
:
$scope.myForm.$pristine = true; // after editing the form
ng-dirty
Klasy mówi, że formularz został zmodyfikowany przez użytkownika, natomiast ng-pristine
klasa mówi, że formularz nie został zmodyfikowany przez użytkownika. Tak ng-dirty
i ng-pristine
to dwie strony tej samej historii.
Klasy są ustawiane w dowolnym polu, podczas gdy formularz ma dwie właściwości $dirty
i$pristine
.
Możesz użyć tej $scope.form.$setPristine()
funkcji, aby zresetować formularz do stanu pierwotnego (pamiętaj, że jest to funkcja AngularJS 1.1.x).
Jeśli chcesz uzyskać $scope.form.$setPristine()
-ish zachowanie nawet w gałęzi 1.0.x AngularJS, musisz wprowadzić własne rozwiązanie (kilka całkiem dobrych można znaleźć tutaj ). Zasadniczo oznacza to iterację po wszystkich polach formularza i ustawienie ich $dirty
flagi na false
.
Mam nadzieję że to pomoże.
pristine mówi nam, czy pole jest nadal dziewicze, a dirty mówi nam, czy użytkownik już wpisał cokolwiek w powiązanym polu:
Pole, które zarejestrowało jedno zdarzenie keydown, nie jest już dziewicze (nie jest bardziej dziewicze) i dlatego jest brudne na zawsze.
źródło
Obie dyrektywy oczywiście służą temu samemu celowi i chociaż wydaje się, że decyzja zespołu kątowego o uwzględnieniu obu koliduje z zasadą DRY i zwiększa ładunek strony, nadal jest raczej praktyczne, aby mieć je obie w pobliżu. Łatwiej jest stylizować elementy wejściowe, ponieważ w plikach css dostępne są zarówno pliki .ng-pristine, jak i .ng-dirty. Myślę, że był to główny powód dodania obu dyrektyw.
źródło
.ng-pristine
i.ng-dirty
zezwalaj na różne stylizacje CSS - wydaje się to najbardziej poprawnym powodem powtórzeniaJak już wspomniano we wcześniejszych odpowiedziach,
ng-pristine
służy do wskazywania, że pole nie zostało zmodyfikowane, natomiastng-dirty
służy do informowania, że zostało zmodyfikowane. Dlaczego potrzebujesz obu?Powiedzmy, że mamy formularz z numerem telefonu i adresem e-mail wśród pól. Wymagany jest telefon lub e-mail, a także musisz powiadomić użytkownika, gdy ma nieprawidłowe dane w każdym polu. Można to osiągnąć za pomocą
ng-dirty
ing-pristine
razem:źródło
ng-pristine ($ pristine)
Boolean True, jeśli formularz / dane wejściowe nie zostały jeszcze użyte ( nie zostały zmodyfikowane przez użytkownika )
ng-dirty ($ dirty)
Boolean True, jeśli formularz / dane wejściowe zostały użyte ( zmodyfikowane przez użytkownika )
$ setDirty (); Ustawia formularz na brudny stan. Tę metodę można wywołać, aby dodać klasę „ng-dirty” i ustawić formularz na stan brudny (klasa ng-dirty). Ta metoda przeniesie aktualny stan do formularzy nadrzędnych.
$ setPristine (); Ustawia formę na jej pierwotny stan. Ta metoda ustawia stan $ pristine formularza na true, stan $ dirty na false, usuwa klasę ng-dirty i dodaje klasę ng-pristine. Dodatkowo ustawia stan $ przesłany na fałsz. Ta metoda będzie również propagowana do wszystkich kontrolek zawartych w tym formularzu.
Przywracanie formularza do pierwotnego stanu jest często przydatne, gdy chcemy ponownie użyć formularza po zapisaniu lub zresetowaniu.
źródło