Czy ktoś może pomóc z dołączonym narzędziem Plunker?
Po prostu prześlij formularz z tylko jednym wymaganym polemweszła. Spowoduje to błędy sprawdzania poprawności. Następnie zresetuj formularz, który wywołuje zarówno setPristine, jak i setUntouched - oba mają zresetować formularz, jednak nie usuwają błędów sprawdzania poprawności?
Chcę, aby formularz został wyczyszczony z danych, ale również nie wyświetlał komunikatów potwierdzających (chociaż doceniam to, że dane są puste, w rzeczywistości są nieprawidłowe)
tj. ta funkcja resetowania
$scope.reset = function(){
$scope.newQuestion = angular.copy(tempQuestion);
$scope.forms.setPristine();
$scope.forms.setUntouched();
};
Odpowiedzi:
5 dla odpowiedzi № 1Wywołujesz niepoprawnie setPristine () i setUntouched ().
Prawidłowa składnia to
formName.$setPristine()
iformName.$setUntouched()
Widzieć ta strona po więcej szczegółów
Ponieważ ustawiasz
attempted=true
w przypadku, gdy chcesz zresetować formularz, musisz zresetować wartośćattempted
także. Zapewni to, żeng-if
ponownie ocenia i nie wyświetla komunikatu o błędzie.
Tak więc poprawny kod reset () jest następujący:
$scope.reset = function(){
$scope.newQuestion = angular.copy(tempQuestion);
$scope.forms.newQuestion.$setPristine();
$scope.forms.newQuestion.$setUntouched();
$scope.attempted = false;
};
Oto zmodyfikowany Plunker
3 dla odpowiedzi № 2
Sprawdź konsolę, a zobaczysz kilka błędów. setPristine()
nie istnieje na obiekcie forms
, jak nazywa się Twój formularz forms.newQuestion
. Dodatkowo funkcją jest $setPristine()
. Aby pozbyć się komunikatów o błędach podczas resetowania, możesz po prostu zresetować swój attempted
flaga jest fałszywa, ponieważ spowoduje to ng-class
oceny wyrażeń są fałszywe.
Będziesz chciał coś takiego:
$scope.reset = function(){
$scope.newQuestion = angular.copy(tempQuestion);
$scope.forms.newQuestion.$setPristine();
$scope.forms.newQuestion.$setUntouched();
$scope.attempted = false;
};
Działający plunker: http://plnkr.co/edit/PqCVayHTXDlHNufBvrwE?p=preview