验证输入的正确方法是角度数字

时间:2016-10-06 11:08:47

标签: angularjs

我有角度的以下指令:

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添加事件处理程序还是有更好的方法?

2 个答案:

答案 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>