Angularjs może zweryfikować dane wejściowe.
Walidacja formularza
Angularjs oferuje walidacji formularza po stronie klienta.
Angularjs monitoruje stan pól formularza i wejściowych (input, textarea, select) i pozwala powiadomić użytkownika o aktualnym stanie.
Angularjs posiada również informacje na temat tego, czy zostały one dotknął lub modyfikacji, czy też nie.
Możesz użyć atrybutów standardem HTML5, aby potwierdzić wejście, można też tworzyć własne funkcje sprawdzania poprawności.
walidacja po stronie klienta nie może sama bezpieczne wejście użytkownika. Walidacja po stronie serwera jest również konieczne. |
wymagany
Użyj atrybutu HTML5 required
, aby określić, że pole wejściowe należy wypełnić:
Przykład
Pole wejściowe są wymagane:
<form name="myForm">
<input name="myInput" ng-model="myInput"
required>
</form>
<p>The input's valid state is:</p>
<h1>{{myForm.myInput.$valid}}</h1>
Spróbuj sam " Użyj typu HTML5 email
, aby określić, że wartość musi być adres e-mail:
Przykład
Pole wejściowe musi być adres e-mail:
<form name="myForm">
<input name="myInput" ng-model="myInput"
type="email">
</form>
<p>The input's valid state is:</p>
<h1>{{myForm.myInput.$valid}}</h1>
Spróbuj sam " Forma państwa i stan wejścia
Angularjs jest stale uaktualniania stanu zarówno w formie i pól wejściowych.
Pola wejściowe mają następujące stany:
-
$untouched
pole nie zostało jeszcze dotknął -
$touched
Pole zostało dotknięte -
$pristine
Pole nie zostało jeszcze zmienione -
$dirty
Pole została zmodyfikowana -
$invalid
Zawartość pola nie jest ważny -
$valid
Zawartość pola jest ważna
Są wszystkie właściwości pola wejściowego, a są albo true
albo false
.
Formularze mają następujące stany:
-
$pristine
Brak pola zostały jeszcze zmienione -
$dirty
Jeden lub więcej zostały zmodyfikowane -
$invalid
Zawartość forma nie jest ważna -
$valid
Zawartość forma jest ważna -
$submitted
formularz jest przesyłany
Są wszystkie właściwości postaci, i są albo true
albo false
.
Można korzystać z tych stanów, aby pokazać znaczące wiadomości do użytkownika. Przykładowo, jeśli pole jest wymagane, a użytkownik pozostawia puste, należy dać użytkownikowi ostrzeżenie:
Przykład
Pokaż komunikat o błędzie, jeśli pole zostało dotknięte i jest pusta:
<input name="myName" ng-model="myName" required>
<span ng-show="myForm.myName.$touched
&& myForm.myName.$invalid">The name is required.</span>
Spróbuj sam " Klasy CSS
Angularjs dodaje klas CSS do formularzy i pól wejściowych w zależności od ich stanów.
Poniższe klasy są dodawane lub usuwane z, pól wejściowych:
-
ng-untouched
Pole nie zostało jeszcze dotknął -
ng-touched
Pole zostało dotknięte -
ng-pristine
Pole nie zostało jeszcze zmienione -
ng-dirty
Pole została zmodyfikowana -
ng-valid
Zawartość pola jest ważna -
ng-invalid
Zawartość pola nie jest ważna -
ng-valid- key
jeden klucz dla każdej walidacji. Przykład:ng-valid-required
, przydatna, gdy istnieje więcej niż jedna rzecz, która musi być potwierdzona -
ng-invalid- key
Przykład:ng-invalid-required
Poniższe klasy są dodawane do lub wyjęty z formy:
-
ng-pristine
Brak pola nie zostały jeszcze zmienione -
ng-dirty
jedno lub więcej pól został zmodyfikowany -
ng-valid
Zawartość forma jest ważna -
ng-invalid
Zawartość forma nie jest ważna -
ng-valid- key
jeden klucz dla każdej walidacji. Przykład:ng-valid-required
, przydatna, gdy istnieje więcej niż jedna rzecz, która musi być potwierdzona -
ng-invalid- key
Przykład:ng-invalid-required
Klasy są usuwane, jeśli wartość reprezentują jest false
.
Dodaj style dla tych klas, aby dać swojej aplikacji lepszego i bardziej intuicyjny interfejs użytkownika.
Przykład
Zastosuj style, używając standardowego CSS:
<style>
input.ng-invalid {
background-color: pink;
}
input.ng-valid {
background-color: lightgreen;
}
</style>
Spróbuj sam " Formularze mogą być także stylu:
Przykład
Zastosuj style niemodyfikowanych (dziewiczych) tworzy, i zmodyfikowanych formach:
<style>
form.ng-pristine {
background-color: lightblue;
}
form.ng-dirty {
background-color: pink;
}
</style>
Spróbuj sam " niestandardowe Validation
Aby utworzyć własną funkcję sprawdzania poprawności jest nieco bardziej skomplikowane. Trzeba dodać nową dyrektywę do aplikacji, oraz radzenia sobie z walidacji wewnątrz funkcji z pewnymi określonymi argumentami.
Przykład
Stwórz własną dyrektywy, zawierającego niestandardową funkcję walidacji, i odnoszą się do niego za pomocą my-directive
.
Pole będzie ważne tylko wtedy, gdy wartość zawiera znak "e":
<form name="myForm">
<input name="myInput" ng-model="myInput" required
my-directive>
</form>
<script>
var app = angular.module('myApp',
[]);
app.directive('myDirective', function() {
return {
require: 'ngModel',
link: function(scope, element,
attr, mCtrl) {
function myValidation(value)
{
if (value.indexOf("e") > -1)
{
mCtrl.$setValidity('charE',
true);
} else {
mCtrl.$setValidity('charE', false);
}
return value;
}
mCtrl.$parsers.push(myValidation);
}
};
});
</script>
Spróbuj sam " Przykład Poradnik:
W HTML, nowa dyrektywa będzie określany za pomocą atrybutu my-directive
.
W JavaScripcie zaczniemy dodając nową dyrektywę o nazwie myDirective
.
Pamiętaj, że podczas nadawania nazw dyrektywy, należy użyć nazwy liter wielbłąda, myDirective
, ale podczas wywoływania go, należy użyć -
oddzielone imię, my-directive
.
Następnie wróć do obiektu, w którym można określić, które wymagają ngModel
, która jest ngModelController.
Zrób funkcję łączącą, który trwa kilka argumentów, gdzie czwarty argument, mCtrl
, jest ngModelController
,
Następnie określ funkcję, w tym przypadku o nazwie myValidation
, która przyjmuje jeden argument, argument ten jest wartość elementu wejściowego.
Sprawdza, czy wartość zawiera literę "e" i ustaw ważność regulatora modelu albo true
albo false
.
W końcu, mCtrl.$parsers.push(myValidation);
Doda myValidation
funkcję do szeregu innych funkcji, która zostanie wykonana przy każdej zmianie wartości wejściowej.
Przykład Validation
<!DOCTYPE html>
<html>
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script>
<body>
<h2>Validation Example</h2>
<form ng-app="myApp"
ng-controller="validateCtrl"
name="myForm" novalidate>
<p>Username:<br>
<input type="text" name="user" ng-model="user"
required>
<span style="color:red" ng-show="myForm.user.$dirty &&
myForm.user.$invalid">
<span ng-show="myForm.user.$error.required">Username
is required.</span>
</span>
</p>
<p>Email:<br>
<input type="email" name="email" ng-model="email" required>
<span
style="color:red" ng-show="myForm.email.$dirty && myForm.email.$invalid">
<span ng-show="myForm.email.$error.required">Email is required.</span>
<span ng-show="myForm.email.$error.email">Invalid email address.</span>
</span>
</p>
<p>
<input type="submit"
ng-disabled="myForm.user.$dirty && myForm.user.$invalid ||
myForm.email.$dirty && myForm.email.$invalid">
</p>
</form>
<script>
var app = angular.module('myApp', []);
app.controller('validateCtrl',
function($scope) {
$scope.user = 'John Doe';
$scope.email = '[email protected]';
});
</script>
</body>
</html>
Spróbuj sam " HTML atrybut formą novalidate służy do wyłączenia domyślnego walidacji przeglądarki. |
Przykład Poradnik
Dyrektywa angularjs ng model łączy elementy wejściowe do modelu.
Model ten obiekt posiada dwie właściwości: łatwość i e-mail.
Ze względu ng pojawienia przęsła z kolor: czerwony są wyświetlane tylko wtedy, gdy użytkownik lub e-mail jest $ brudne i $ nieprawidłowy.