angularjs – 如何覆盖角度类型=数字验证?

前端之家收集整理的这篇文章主要介绍了angularjs – 如何覆盖角度类型=数字验证?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在撰写一份指令,以验证瑞典社会安全号码(personnummer).要在这样的输入元素上使用:
<input type="text" ng-model="pnr" pnrvalidator />

瑞典社会安全号码的格式为yyyymmdd-nnnn,例如19121212-1212

只要我使用type =“text”,我的指令就可以工作.但是因为我想在移动浏览器上使用数字键盘,
然后我改为type =“number”:

<input type="number" ng-model="pnr" pnrvalidator />

然后我的验证器只有在我的输入中没有输入破折号( – )时才有效,例如191212121212.如果我输入19121212-1212那么它不是有效数字.
并且ng-invalid ng-invalid-number类被添加到我的input元素中

当我编写指令时,我遵循了文档如何修改内置验证器https://docs.angularjs.org/guide/forms
但它似乎不适用于type = number验证,还是我错过了什么?
我使用角度1.3(和1.4).

我的指令代码

angular.module('example').directive('pnrvalidator',function(){
return {
    require: 'ngModel',link: function(scope,elm,attrs,ctrl) {


    var validatePnr = function(inputString){
        /*
        * My validation logic here. Removed for this example
        */

    };


    ctrl.$validators.number = function(modelValue,viewValue) {
        if (ctrl.$isEmpty(modelValue)) {
          // consider empty models to be valid
          return true;
        }
        if (validatePnr(viewValue)) {
          // it is valid
          return true;
        }
        // it is invalid
        return false;
    };
    }
};
});

我的例子http://plnkr.co/edit/OFYG06YEFwKg8zrLYVN1?p=preview的一个plunker

你可以告诉html不要通过标签中的novalidate属性来验证html表单.当您在angularjs中进行验证时,您不需要再次通过HTML验证它.

http://www.w3schools.com/tags/att_form_novalidate.asp

猜你在找的Angularjs相关文章