2014-11-24 179 views
0

我正在尝试为ng-minlength和ng-maxlength指令创建指令包装。这些包装指令的目的是用最大和最小长度填充输入模型,以便能够创建自定义验证消息。我的指令看起来像这样添加指令的角度指令

var directive = angular.module('selfservice.directives', []).directive 
directive('minlength', [function() { 
    return { 
     restrict: 'A', 
     require: 'ngModel', 
     compile: function compile(tElement, tAttrs, transclude) { 
      return { 
       pre: function preLink(scope, elem, attrs) { 
        scope.minlength = attrs['minlength']; 
        elem.attr('ng-minlength', scope.minlength); 
        elem.removeAttr('minlength'); 
       } 
      } 
     } 
    } 
}]) 

这一切都正确编译与ng-minlength属性添加,但是ng-minlength指令似乎没有被影响通常的方式现场有效性。我将该函数专门添加到了预编译中,以便它能够在常规摘要循环中一起编译,就好像它从一开始就一直在那里一样,但似乎并不奏效。有人能帮助我理解如何实现这一目标吗?

+0

通常情况下,您会调用'$ compile(element)(scope)'获得角度来关注您的新ng-'指令,但是您同时删除了自己的指令属性?我不确定会有什么影响。此外,我认为它可能需要在后链接功能...如果你没有删除你自己的指令属性,它可能会导致不必要的递归... – 2014-11-24 20:58:09

+0

我没有得到这个工作就在我看到这个职位之前做正是你所说的,将编译服务添加到后链接功能。此外,我正在删除我自己的指令,以防止任何可能导致的循环,如果我在那里。 – richbai90 2014-11-24 21:00:44

+0

删除自己的指令的问题在于你正在为'ng-'指令设置属性值,所以如果你改变了你的范围值,我不认为它们会更新。如果'ng-'指令不在那里并且你添加了它,并且设置了一个'attrs。$ observe('minLength')'来更新'ng-minlength'属性,那么可以在那里留下你的指令并且只重新编译当价值改变了? – 2014-11-24 21:19:14

回答

0

正如上面指出:

我没有得到这个通过添加编译服务来发布链接功能

工作只有重新编译,如果NG-指令是不存在,你加入它,并且设置一个attrs。$ observe('minLength')来更新ng-minlength属性。