2014-09-10 9 views
24

Wykonując podstawowe badania nad zwyczaj walidacji po stronie klienta w angularjs czytałem dokumentację ngModel.NgModelController i znalazł następujące tajemniczy wiersz:

$ setValidity (validationErrorKey, isValid); Zmień stan ważności i powiadomi formularz.

Ta metoda może zostać wywołana w $ parsers/$ formatters. Jednak, jeśli to możliwe, użyj potwora walidatora ngModel. $, Który jest przeznaczony do automatycznego wywoływania tej metody.

Kilka godzin i wielu Google (i StackOverflow!) Przeszukuje później, ja nic o tym ngModel.$validators rurociągu nigdzie znaleźć. Wszystkie przykłady niestandardowych walidacji użyć konfiguracji jak poniżej $parsers/$formatters:

link: function (scope, elem, attr, ctrl) { 
    // Other necessary logic... 

    ctrl.$parsers.push(function() { 
     // Validation logic 
     ctrl.$setValidity('validation-type', true); 
    }); 

    ctrl.$formatters.push(function() { 
     // Validation logic 
     ctrl.$setValidity('validation-type', true); 
    }); 
}, 

Pytanie: kątowej dokumentacja wskazuje, że powyższy kod jest nie najlepsza praktyka, oraz że ten mityczny ngModel.$validators PipLine jest właściwa droga . Nie udało mi się znaleźć żadnych informacji na temat tej lepszej praktyki. W jaki sposób można użyć ngModel.$validators do prawidłowego wdrożenia tej procedury sprawdzania poprawności klienta?

+0

Na tej samej stronie link, nieco niżej, znajdziesz odpowiedź ... –

Odpowiedz

22

$validators są nowością w Angular 1.3. Ten blogu daje dobre wyjaśnienie, w jaki sposób z nich korzystać: http://www.yearofmoo.com/2014/09/taming-forms-in-angularjs-1-3.html#the-validators-pipeline

Podstawowym założeniem jest to, że dodanie funkcji na ngModel.$validators zwracającą boolean określenia, czy model jest prawidłowy.

Następnie można odwołać weryfikator w kodzie HTML w taki sam sposób, w jaki odwoływałbyś się do wbudowanych walidatorów. na przykład

<div ng-if="myForm.myField.$error.myValidator"> 
    some error message here 
</div> 
Powiązane problemy