/ / AngularJs setPristine () nie resetuje nieprawidłowej flagi - javascript, angularjs

AngularJs setPristine () nie usuwa niepoprawnej flagi - javascript, angularjs

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();
};

Przykład Plunkera

Odpowiedzi:

5 dla odpowiedzi № 1
  1. Wywołujesz niepoprawnie setPristine () i setUntouched ().

    Prawidłowa składnia to formName.$setPristine() i formName.$setUntouched()

    Widzieć ta strona po więcej szczegółów

  2. Ponieważ ustawiasz attempted=true w przypadku, gdy chcesz zresetować formularz, musisz zresetować wartość attempted także. Zapewni to, że ng-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