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();
            }
          }
        }
    }
});
关于触发验证的第二条评论:我认为反之亦然:即首先通过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();
        }
 });
正如您所见,模型.$ options(定义执行modelController的$ validators管道的事件)可以在创建/启动时间之后设置.对validate的调用将对验证进行排队(将在下一个验证事件上执行).
| 归档时间: | 
 | 
| 查看次数: | 4749 次 | 
| 最近记录: |