一尘不染

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

angularjs

有没有一种方法可以在指令内部设置输入有效性?指令模板中存在的输入。

可以说我有模板:

<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
          };

        }
      }
    })

我不能用表单包装它,因为其背后的思想是允许用户将此输入包含在用户的表单中。


阅读 212

收藏
2020-07-04

共1个答案

一尘不染

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

.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');
2020-07-04