Я пытаюсь создать директивную оболочку для директив 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-', но вы одновременно удаляете свой собственный атрибут директивы? Я не уверен, что повлияет на это. Также я думаю, что, возможно, это должно быть в функции пост-ссылки ... Если вы не удалили свой собственный атрибут директивы, это может вызвать нежелательную рекурсию ... –
Я получил это, чтобы работать, прежде чем я увидел этот пост, сделав что вы сказали, добавив компиляцию к функции post link. Также я удаляю свою собственную директиву, чтобы предотвратить любой цикл, который может быть вызван, если бы у меня его было. – richbai90
Проблема с удалением собственной директивы заключается в том, что вы устанавливаете значения атрибутов для директив 'ng-', поэтому я не думаю, что они будут обновляться, если вы измените значение в своей области. Возможно, вы оставите свою директиву и только перекомпилируете, если директива 'ng-' не была там, и вы ее добавили, а также настроили 'attrs. $ Наблюдать ('minLength')' для обновления атрибута 'ng-minlength' когда значение изменяется? –