创建AngularJS指令以在模糊上验证

时间:2014-12-16 02:10:05

标签: javascript angularjs angularjs-directive

希望重新创建Angular 1.3.X中我们可以使用的一些功能 - 我创建的应用 能够很好地工作(或者至少足够好)在IE 8中。出于这个原因,我(遗憾地)被限制为不使用1.3.X.我试图模仿1.3.X中提供的$ng-touched attr时遇到了一些麻烦。

我们的应用程序的一部分需要提醒用户,如果他们的表单元素是tab,那么他们的表单元素就无效了。就目前而言,它不会在任何表单元素上设置$invalid attr,除非我已在文本中输入并删除它。我尝试使用$pristine$dirty来实现$invalid,但它们似乎都是根据输入的值来实现的,而不是它是否被触及了(也许这是1.3.X的一大优势)

目标:当用户在表单中进行制表时,可以触发验证并将每个空表单元素设置为$invalid,如果它为空白。基本上是模仿1.2.X中$ ng-touching attr的行为。这就是我到目前为止所拥有的:

angular.module('goodStewardApp')
.directive('chf-validate', function () {
return {
  require: 'ngModel',
  link: function(scope, elm, attrs, ctrl) {
    $(elm).blur(
      function(elm) {
        ctrl.$setValidity(elm, false);
      }
    );
  }
};
});

非常感谢任何帮助。谢谢!

1 个答案:

答案 0 :(得分:1)

在角度1.2.x中完成模拟ng-touched行为的最佳方法是使用ngBlur将验证属性设置为true。所以:

<form name="aForm">

   <input name="foo" ng-model="foo.bar" ng-blur="validateThisElement=true" ng-required="true">

   <div ng-show="aForm.foo.$error.required && validateThisElement"> 
      Oh no! An alert!
   </div>

</form>

这允许您在用户tab之后通过表单运行验证,这是人们习惯使用计算机的常用方式,用于与您的角形式/应用程序进行交互。希望这有助于任何人因IE8原因仍然坚持使用1.2.X!