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
指令似乎没有被影响通常的方式现场有效性。我将该函数专门添加到了预编译中,以便它能够在常规摘要循环中一起编译,就好像它从一开始就一直在那里一样,但似乎并不奏效。有人能帮助我理解如何实现这一目标吗?
通常情况下,您会调用'$ compile(element)(scope)'获得角度来关注您的新ng-'指令,但是您同时删除了自己的指令属性?我不确定会有什么影响。此外,我认为它可能需要在后链接功能...如果你没有删除你自己的指令属性,它可能会导致不必要的递归... – 2014-11-24 20:58:09
我没有得到这个工作就在我看到这个职位之前做正是你所说的,将编译服务添加到后链接功能。此外,我正在删除我自己的指令,以防止任何可能导致的循环,如果我在那里。 – richbai90 2014-11-24 21:00:44
删除自己的指令的问题在于你正在为'ng-'指令设置属性值,所以如果你改变了你的范围值,我不认为它们会更新。如果'ng-'指令不在那里并且你添加了它,并且设置了一个'attrs。$ observe('minLength')'来更新'ng-minlength'属性,那么可以在那里留下你的指令并且只重新编译当价值改变了? – 2014-11-24 21:19:14