如何在指令(angularjs)中设置有效性

时间:2016-04-19 14:36:06

标签: javascript angularjs validation angularjs-directive

有没有办法在指令中设置输入有效性? 输入存在于指令的模板中。

假设我有模板:

<input type="text" ng-model="someObj.val" ng-change="check()">

我的指示就像:

.directive('myDir', function () {
      return {
        restrict: 'E',
        templateUrl: 'trmplate.html',
        link: function (scope) {

          someObj = {val: '123'};

          scope.check = function () {
            var result = false;
            myInput.$setValidity(result); //this is didn't work, $setValidity not a function
          };

        }
      }
    })

我无法用表单包装它,因为它背后的想法是允许用户在用户的表单中包含此输入。

2 个答案:

答案 0 :(得分:3)

您需要检索与输入关联的NgModelController实例。然后在此对象上调用$setValidity,指定验证密钥(必需,minlength,自定义密钥等)。它看起来像这样:

.directive('myDir', function() {
  return {
    restrict: 'E',
    template: '<input type="text" ng-model="someObj.val" ng-change="check()">',
    link: function(scope, element) {

      var modelController = element.find('input').controller('ngModel');

      someObj = {
        val: '123'
      };

      scope.check = function() {
        var result = false;
        modelController.$setValidity('myrequired', result);
      };

    }
  }
})

这里最重要的部分是如何获得NgModelController。下面的代码行正在处理它:

var modelController = element.find('input').controller('ngModel');

答案 1 :(得分:2)

你不需要使用elem来获取控制器,只需将它作为参数添加到链接函数中,并将require设置为['ngModel']以获得模型ctrl。

 require: ['ngModel'],
 link: function (scope, elem, attrs, ctrl) {

      someObj = {val: '123'};

      scope.check = function () {
        var result = false;
        ctrl.$setValidity(result);
      };

    }