Подтвердить что ты не робот

Что такое * * конвейер ngModel. $Validators?

При выполнении некоторых фундаментальных исследований по пользовательской проверке на стороне клиента в Angular.js я читал документацию ngModel.NgModelController и нашел следующую криптическую строку

$setValidity (validationErrorKey, isValid); Измените состояние действительности и уведомите форму.

Этот метод можно вызвать в $parsers/$formatters. Однако, если возможно, используйте конвейер ngModel. $validators, который предназначен для автоматического вызова этого метода.

Спустя пару часов и многие поиски Google (и StackOverflow!) позже я ничего не нашел в этом конвейере ngModel.$validators. Все пользовательские примеры валидации используют настройку $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);
    });
},

Вопрос: Документация Angular гласит, что приведенный выше код не является лучшей практикой и что эта мифическая пиковая линия ngModel.$validators - правильный путь. Я не нашел никакой информации об этой лучшей практике. Как использовать ngModel.$validators для правильной реализации этой пользовательской проверки клиентов?

4b9b3361

Ответ 1

$validators являются новыми для Angular 1.3. Это сообщение в блоге дает хорошее объяснение того, как их использовать: http://www.yearofmoo.com/2014/09/taming-forms-in-angularjs-1-3.html#the-validators-pipeline

Основная идея заключается в том, что вы добавляете функцию на ngModel.$validators, которая возвращает boolean, определяющую, действительно ли модель.

Затем вы можете подтвердить этот валидатор в своем HTML так же, как и ссылку на любые встроенные валидаторы. например.

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