我有角度的以下指令:
define(function(require) {
var angular = require('angular');
angular.module('is-numeric', [])
.directive('isNumeric', [function() {
return {
require: 'ngModel',
restrict: 'A',
link: function(scope, elem, attrs, ctrl) {
elem.on('keyup', function(e) {
ctrl.$setValidity('isnumeric', !isNaN(e.target.value));
});
}
};
}]);
});
我真的需要为keyup添加事件处理程序还是有更好的方法?
答案 0 :(得分:0)
你应该使用验证器:
link: function(scope, elem, attrs, ctrl) {
ctrl.$validators.isnumeric = function(modelValue, viewValue){
return !isNaN(viewValue);
};
}
答案 1 :(得分:0)
为此,您不应使用任何指令。 我的建议是使用内置的ng-pattern验证器,它将处理你描述的情况。
您可以在此处查看:https://docs.angularjs.org/api/ng/directive/ngPattern
<input ng-model="validatedNumber" ng-pattern=$scope.numberValidation/>
在你的控制器中你应该像这样定义正则表达式:
$scope.numberValidation = /^(0|[1-9][0-9]*)$/;
编辑:我在解释中遗忘的是,您应该将其放入表单中,然后当您想验证/发送表单时,您应该检查表单的有效性,如下所示:
if(formname.$valid())
其中formname是DOM元素的名称,它被定义为表单
<form name="formname"> [...] </form>