У меня есть эта директива пользовательских проверок:Angularjs - Проверка исходного значения URL-адрес с пользовательской директивой
/**
* Overwrites default url validation using Django's URL validator
* Original source: http://stackoverflow.com/questions/21138574/overwriting-the-angularjs-url-validator
*/
angular.module('dmn.vcInputUrl', [])
.directive('vcUrl', function() {
// Match Django's URL validator, which allows schemeless urls.
var URL_REGEXP = /^((?:http|ftp)s?:\/\/)(?:(?:[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?\.)+(?:[A-Z]{2,6}\.?|[A-Z0-9-]{2,}\.?)|localhost|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})(?::\d+)?(?:\/?|[\/?]\S+)$/i;
var validator = function(value) {
if (!URL_REGEXP.test(value) && URL_REGEXP.test('http://' + value)) {
return 'http://' + value;
} else {
return value;
}
}
return {
require: '?ngModel',
link: function link(scope, element, attrs, ngModel) {
function allowSchemelessUrls() {
// Silently prefixes schemeless URLs with 'http://' when converting a view value to model value.
ngModel.$parsers.unshift(validator);
ngModel.$validators.url = function(value) {
return ngModel.$isEmpty(value) || URL_REGEXP.test(value);
};
}
if (ngModel && attrs.type === 'url') {
allowSchemelessUrls();
}
}
};
});
Он отлично работает, когда вы «грязный» вводу путем ввода или вставок, но мне нужно, чтобы запустить эту проверку, перезапись значения по умолчанию type="url"
, когда значение первоначально задано в ngModel.
Я попытался добавить ngModel.$formatters.unshift(validator);
, но это приводит к добавлению «http: //» к вводу, которое мне нужно избегать, поскольку изменения пользователя одобрены вручную, и было бы пустой тратой времени, чтобы утвердить добавление 'HTTP: //'.
Любая помощь будет оценена!
Если вы используете AngularJS> = 1,3, то вы должны смотреть на новый $ валидатора трубопровода: http://www.yearofmoo.com/2014/09/taming-forms-in-angularjs-1-3.html#the-validators-pipeline – DanEEStar