Gra*_*amB 10 javascript angularjs
我有一个调用的验证指令valid-number,用于使用$ setValidity设置表单的有效性 - 这适用于我在输入框中键入的指令作为属性应用的任何文本值.
HTML是
<form name="numberForm">
<input name="amount" type="text" ng-model="amount" required valid-number /></form>
Run Code Online (Sandbox Code Playgroud)
该指令如下
angular.module('test',[]).directive('validNumber',function(){
return{
require: "ngModel",
link: function(scope, elm, attrs, ctrl){
var regex=/\d/;
ctrl.$parsers.unshift(function(viewValue){
var floatValue = parseFloat(viewValue);
if(regex.test(viewValue)){
ctrl.$setValidity('validNumber',true);
}
else{
ctrl.$setValidity('validNumber',false);
}
return viewValue;
});
}
};
});
Run Code Online (Sandbox Code Playgroud)
但是,我还希望触发验证并将css设置为无效的clss,如果输入框初始化为首次加载页面时的值无效,例如,如果我设置$scope.amount = 'not a number'我希望输入框有指令适用于它,但没有快乐.为了not a number突出显示为无效,我必须更改输入的内容,从而触发指令.
如何确保该指令适用于<input> 初始化的任何内容?
这里有一个完整的代码示例;
Ste*_*wie 16
$parsersarray包含将应用于模型从视图接收的值的函数列表(用户键入的内容),并且$formatters数组包含在视图中显示之前应用于模型值的函数列表.
在您的指令中,您正确使用了$parsers数组,但$formatters如果要验证初始值,还需要添加数组:
angular.module('test',[]).directive('validNumber',function(){
return{
require: "ngModel",
link: function(scope, elm, attrs, ctrl){
var regex = /^\d$/;
var validator = function(value){
ctrl.$setValidity('validNumber', regex.test(value));
return value;
};
ctrl.$parsers.unshift(validator);
ctrl.$formatters.unshift(validator);
}
};
});
Run Code Online (Sandbox Code Playgroud)