tik*_*ike 3 validation angularjs angularjs-directive
尽管使用谷歌等,我没有找到解决我的问题.谢谢你看看.
我想实现以下输入验证行为(使用angular ngModelController):
只有在用户首次离开字段后才能触发输入验证.但是,如果存在验证错误,则验证不仅应触发模糊,还应触发更改,以便在纠正错误时立即通知用户.
我创建了一个仅带有(post)链接函数的指令,它在同一元素上"需要"s ngModel.
angular.module('foo').directive('errFB', function(){
return {
restrict: 'A',
require: 'ngModel',
link: function(scope, iElem, attrs, ngModel){
// which trigger source / event should I listen on?
// iElem.on, ngModel.$viewChange, scope.$on, scope.$parent.$on?
// iElem.on, seemed the best fit.
xyz.on(..., function(){
if (ngModel.$touched && ngModel.$invalid){
// here validation is not triggered.
// probably, due to having ngModelOptions
// set to only validate on blur?
// could this be changed programmatically?
ngModel.$validate();
}
}
}
}
});
Run Code Online (Sandbox Code Playgroud)
关于触发验证的第二条评论:我认为反之亦然:即首先通过ngModelOptions对'default'(更改)和'blur'进行验证,然后停止验证运行,以防它由'default'引起'触发,当ngModel.$ touch === false.但禁用验证似乎非常困难,并且违背角度流.
任何建议都表示赞赏.非常感谢你!
所以,经过一番漫长的努力,我找到了一条路.其实这很简单:
link: function(scope, iElem, attrs, ngModel){
iElem.on("change", function(evt){
if (ngModel.$touched && ngModel.$invalid){
ngModel.$options.updateOnDefault = true;
ngModel.$validate();
}
});
Run Code Online (Sandbox Code Playgroud)
正如您所见,模型.$ options(定义执行modelController的$ validators管道的事件)可以在创建/启动时间之后设置.对validate的调用将对验证进行排队(将在下一个验证事件上执行).
| 归档时间: |
|
| 查看次数: |
4749 次 |
| 最近记录: |