2014-11-24 117 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屬性。