2013-10-25 32 views
0

我有一个字段,我想失败验证,如果该值不是一个整数。还有另一个字段可以更新这个字段的值,所以我需要编写一个指令,当值被改变为除int以外的东西时,它将监视字段值设置验证错误。

无论何时将'my-required'属性添加到HTML中,select选项都不会加载,并且该指令显然不起作用。

问题:我该如何做这项工作?

这里是小提琴:http://jsfiddle.net/zFeGN/2/

HTML:

<select ng-model="tran.type" name="tranType" ng-init="tran.type='1'" ng-options="obj.value as obj.text for obj in tradeTypeOptions" my-required="tran.type"></select> 

指令:

.directive('myRequired', function() { 
    var regex = /^\-?\d*$/; 
    return { 
    restrict: 'A',  
    scope: { 
     'myRequired': '=' 
    }, 
    link: function(scope, elm, attrs, ctrl) {  
     scope.$watch('myRequired', function(n, o){ 
     //alert(n); 
     if (regex.test(n)) { 
      ctrl.$setValidity('myRequired', true); 
     } else { 
      ctrl.$setValidity('myRequired', false); 
     } 
     },true); 
    } 
    }; 
}); 

回答

1

如果你想设置输入的有效性,必须使用

require: 'ngModel' 

我想你也并不需要一个孤立的范围。而且,由于tran.type是原始的,因此您不需要将第三个参数$watch设置为true。最后,这里是一个修改指令:

.directive('myRequired', function() { 
    var regex = /^\-?\d*$/; 
    return { 
    restrict: 'A', 
    require: 'ngModel', 
    link: function(scope, elm, attrs, ctrl) { 
     scope.$watch(attrs.myRequired, function(n, o){ 
     //console.log(n); 
     if (regex.test(n)) { 
      ctrl.$setValidity('myRequired', true); 
     } else { 
      ctrl.$setValidity('myRequired', false); 
     } 
     }); 
    } 
    }; 
}); 

和工作的jsfiddle:http://jsfiddle.net/aM84a/2/

+0

的$表允许,即使它被另一个动作或指令更新了验证(即没有用户输入)。这就是我的用例中发生的事情。我想我需要定义范围来隔离