Итак, у вас есть несколько незначительных ошибок в логике вашего кода для правильной работы этой функции.
Что вы пытаетесь сделать, это создать пользовательский валидатор .Ваша директива использует функцию $parser
, которая предназначена для анализа значения модели для отображения.Что вы действительно хотите делать, так это работать с $validators
функцией.
Итак, вы хотели бы сделать что-то по следующему:
var searchApp = angular.module('searchApp', []);
searchApp.directive('validUser', ['$scope', function ($scope) {
var users = ['11', '22', '33', '44']
return {
require: 'ngModel',
link: function (scope, element, attr, mCtrl) {
mCtrl.$validators.charE = function (value) {
return users.includes(value)
}
}
};
}]);
Что произойдет, когда меняется ngModel
, он пропустит значение через валидаторы и определит, являются ли онидопустимый или недействительный и автоматически устанавливает ng-invalid-{name}
или ng-valid-{name}
(в данном примере ng-invalid-charE
и ng-valid-charE
).
Вы можете использовать ngMessages , чтобы определить ваши ошибки, и онибудет отображаться и скрываться соответствующим образом в зависимости от действительности.
Ваш ngController
, скорее всего, должен быть директивой, которая добавляет валидатор и ваш контроллер, чтобы содержать всю функциональность поиска / форму HTML и находиться над вводом, чтобы определитьваша сфераИзменение его на директиву будет означать, что вы удалите ngController
из ввода и добавите атрибут для valid-user
(как я обновил имя).