gpt4 book ai didi

javascript - 用于显示输入错误的 AngularJS 表单验证指令

转载 作者:可可西里 更新时间:2023-11-01 01:57:34 25 4
gpt4 key购买 nike

我需要创建一个验证指令来自动显示每个输入的所有输入错误。此验证指令应显示当前的所有错误,并且错误列表应在用户键入时自动更新。

如果输入是脏的,而不是空的和无效的,我需要显示所有输入错误。我需要将所有错误添加到此输入元素附近的 html 元素中。

例如,如果输入有 type="email"和 ng-minlength="5"并且用户输入了 'abc' 我需要在这个输入附近显示这样的错误:'无效的电子邮件;请至少输入5个字符;'

例如,如果输入有 type="number"attr 和 min="200"以及 min-model="minnumber"和 minnumber 模型设置为 '300' 并且用户键入 '100' 我需要在附近显示此类错误input: '请输入最小数量500;应该大于最小值;'

如果相关模型(最小模型参数)已更新,我还需要更新上一个示例中输入的所有错误消息。

var app = angular.module('app', []);

app.controller('appCtrl', function ($scope) {

});

app.directive('validate', function () {
return {
restrict: 'A',
require: 'ngModel', // require: '^form',

link: function (scope, element, attrs, ctrl) {
console.log('======================');
console.log(scope);
console.log(element);
console.log(attrs);
console.log(ctrl);
console.log(scope.form.$error);
angular.forEach(scope.form.$error, function (value, key) {
console.log('scope.form.$error = ' + key + ': ' + value);
console.log(value);
});

}
};
});


app.directive('positiveInteger', function () {
return {
restrict: 'A',
require: 'ngModel',
link: function (scope, element, attrs, ctrl) {
ctrl.$parsers.unshift(function (viewValue) {
var INTEGER_REGEXP = /^\d+$/;
if (INTEGER_REGEXP.test(viewValue)) { // it is valid
ctrl.$setValidity('positiveInteger', true);
return viewValue;
} else { // it is invalid, return undefined (no model update)
ctrl.$setValidity('positiveInteger', false);
return undefined;
}
});
}
};
});


app.directive('positiveFloat', function () {
return {
restrict: 'A',
require: 'ngModel',
link: function (scope, element, attrs, ctrl) {
ctrl.$parsers.unshift(function (viewValue) {
var FLOAT_REGEXP = /^(?:[1-9]\d*|0)?(?:\.\d+)?$/;
if (FLOAT_REGEXP.test(viewValue)) { // it is valid
ctrl.$setValidity('positiveInteger', true);
return viewValue;
} else { // it is invalid, return undefined (no model update)
ctrl.$setValidity('positiveInteger', false);
return undefined;
}
});
}
};
});


app.directive('minModel', function () {
return {
restrict: 'A',
require: 'ngModel',
link: function (scope, element, attrs, ctrl) {
ctrl.$parsers.unshift(function (viewValue) {
if (viewValue > scope[attrs.minModel]) { // it is valid
ctrl.$setValidity('minModel', true);
return viewValue;
} else { // it is invalid, return undefined (no model update)
ctrl.$setValidity('minModel', false);
return undefined;
}
});

}
};
});

你能帮忙制定这个验证指令吗?

或者您能为我指明正确的方向吗?

Link to JSFiddle with some code for testing .

附言使用 UI-Utils 制作了类似的东西但他们的指令无法在一个地方设置类似的错误消息。

最佳答案

我想建议看看这篇文章作者正在解释如何实现你的目标,你可以深入研究代码。 link

这篇文章中显示错误消息的示例

module = angular.module('app', []);

module.directive('showErrors', function($timeout) {
return {
restrict: 'A',
require: '^form',
link: function (scope, el, attrs, formCtrl) {
// find the text box element, which has the 'name' attribute
var inputEl = el[0].querySelector("[name]");
// convert the native text box element to an angular element
var inputNgEl = angular.element(inputEl);
// get the name on the text box
var inputName = inputNgEl.attr('name');

// only apply the has-error class after the user leaves the text box
var blurred = false;
inputNgEl.bind('blur', function() {
blurred = true;
el.toggleClass('has-error', formCtrl[inputName].$invalid);
});

scope.$watch(function() {
return formCtrl[inputName].$invalid
}, function(invalid) {
// we only want to toggle the has-error class after the blur
// event or if the control becomes valid
if (!blurred && invalid) { return }
el.toggleClass('has-error', invalid);
});

scope.$on('show-errors-check-validity', function() {
el.toggleClass('has-error', formCtrl[inputName].$invalid);
});

scope.$on('show-errors-reset', function() {
$timeout(function() {
el.removeClass('has-error');
}, 0, false);
});
}
}
});

module.controller('NewUserController', function($scope) {
$scope.save = function() {
$scope.$broadcast('show-errors-check-validity');

if ($scope.userForm.$valid) {
alert('User saved');
$scope.reset();
}
};

$scope.reset = function() {
$scope.$broadcast('show-errors-reset');
$scope.user = { name: '', email: '' };
}
});

关于javascript - 用于显示输入错误的 AngularJS 表单验证指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25278251/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com