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 № 1Prawdopodobnie 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"