2014-11-24 2 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-', но вы одновременно удаляете свой собственный атрибут директивы? Я не уверен, что повлияет на это. Также я думаю, что, возможно, это должно быть в функции пост-ссылки ... Если вы не удалили свой собственный атрибут директивы, это может вызвать нежелательную рекурсию ... –

+0

Я получил это, чтобы работать, прежде чем я увидел этот пост, сделав что вы сказали, добавив компиляцию к функции post link. Также я удаляю свою собственную директиву, чтобы предотвратить любой цикл, который может быть вызван, если бы у меня его было. – richbai90

+0

Проблема с удалением собственной директивы заключается в том, что вы устанавливаете значения атрибутов для директив 'ng-', поэтому я не думаю, что они будут обновляться, если вы измените значение в своей области. Возможно, вы оставите свою директиву и только перекомпилируете, если директива 'ng-' не была там, и вы ее добавили, а также настроили 'attrs. $ Наблюдать ('minLength')' для обновления атрибута 'ng-minlength' когда значение изменяется? –

ответ

0

Как было отмечено выше:

я получил эту работу, добавив службу компиляции функции

после ссылки только перекомпилировать если ng- директива не была там, и вы его добавили, а также настроить attrs. $ наблюдать ('minLength'), чтобы обновить атрибут ng-minlength при изменении значения.