/ / Jak zmusić ngMessages do pokazywania błędów bez potrzeby dotykania wejść - angularjs

Jak zmusić ngMessages do pokazywania błędów bez potrzeby dotykania wejść - angularjs

Rozwijam wielostronicową aplikację internetową (nie anAngular SPA). W niektórych przypadkach muszę renderować strony z osadzonymi błędami sprawdzania poprawności (np. Nieudana próba logowania po HTTP POST). Chcę, aby te błędy były wyświetlane przez kąt podczas ładowania strony. Stworzyłem własny weryfikator (dyrektywa nazywa się to odd Na razie). Wydaje się jednak, że jedynym sposobem na ich wyświetlenie jest rozmycie z każdego pojedynczego pola wejściowego.

<md-input-container>
<label>Email</label>
<input name="j_username" type="email" ng-model="j_username" odd="false" md-autofocus />
<div ng-messages="login.j_username.$error">
<span ng-message="odd">Some error message prerendered on a server side</span>
</div>
</md-input-container>

Oto link do codepen: http://codepen.io/anon/pen/RGRgoN Kliknij na e-mail, a następnie poluzuj ostrość, pojawi się komunikat o błędzie.

Pytaniem jest: jak wymusić kątowe wyświetlanie wszystkich komunikatów sprawdzania poprawności dla wszystkich pól formularza przy ładowaniu strony?

Odpowiedzi:

0 dla odpowiedzi № 1

Prawdopodobnie jest to skrót, ale po dodaniu tego setTimeout do moich niestandardowych błędów sprawdzania poprawności zaczęły pojawiać się na stronie, w razie potrzeby. Jeśli ktoś jest świadomy lepszego sposobu, daj mi znać!

app.directive("hasVe", function() {
return {
restrict : "A",
require : "ngModel",

link : function(scope, element, attributes, ngModel) {
var hasVe = attributes.hasVe;
ngModel.$validators.hasVe = function(modelValue) {
return hasVe !== "true";
};

// NOTE: This looks like a shortcut, but it works
setTimeout(function() {
ngModel.$touched = true;
scope.$apply();
}, 100);
}
};
});

Oto zaktualizowany fragment: http://codepen.io/anon/pen/RGRmpY


0 dla odpowiedzi nr 2

Właśnie natknąłem się na ten problem. Ten wątek był pomocny: pokaż komunikaty o błędach sprawdzania poprawności podczas przesyłania w angularjs

To, co chcesz zrobić, to dodać ng-show = "login. $ Submitted" do swojego elementu ng-messages. ng-messages będzie wciąż pracuję tak jak wcześniej, gdzie pojawiają się komunikaty o błędach, jeśli dane wejściowe zostały "dotknięte" lub zmodyfikowane, ale dodaje również to, co chcesz, czyli wyświetla komunikaty o błędach, jeśli użytkownik próbuje przesłać.

gdy użytkownik próbuje przesłać formularz, zmienna logiczna o kształcie kątowym. $ submitted zostaje ustawiona na wartość true (nawet jeśli przesłanie nie powiodło się)

<div ng-messages="login.j_username.$error" ng-show="login.$submitted">
<span ng-message="odd">Some error message prerendered on a server side</span>
</div>

również, pamiętaj o dołączeniu ngMessages do swojej aplikacji: https://docs.angularjs.org/api/ngMessages#module-installation

angular.module("app", ["ngMessages"]);

jest to zdecydowanie wymagane, jeśli używasz materiału kątowego. a nawet nie musisz używać ng-show = "login. $ submitted"