Angular - Декорирующие директивы
Я пытаюсь использовать Angular "декоратор", чтобы добавить функциональность к некоторым директивам. Предположим, что мое директивное имя - myDirective. Мой код выглядит следующим образом:
angular.module('app').config([
'$provide', function($provide) {
return $provide.decorator('myDirective', [
'$delegate', '$log', function($delegate, $log) {
// TODO - It worked! Do something to modify the behavior
$log.info("In decorator");
}
]);
}
]);
Я продолжаю получать это сообщение:
Uncaught Error: [$injector:unpr] Unknown provider: myDirectiveProvider from app
В меру моих возможностей, директивы уже зарегистрированы к моменту выполнения функции декоратора. Любое понимание будет оценено!
Ответы
Ответ 1
В этой статье показано, как вы можете использовать decorator() с помощью директив.
Вам просто нужно включить "Директива" в качестве суффикса для имени. Следовательно, в моем примере я должен был делать
return $provide.decorator('myDirectiveDirective', ['$delegate', '$log', function($delegate, $log) {
// TODO - It worked! Do something to modify the behavior
$log.info("In decorator");
// Article uses index 0 but I found that index 0 was "window" and index 1 was the directive
var directive = $delegate[1];
}
http://angular-tips.com/blog/2013/09/experiment-decorating-directives/
Ответ 2
Декораторы, созданные с помощью метода decorator
, предназначены только для служб. Они должны быть созданы с помощью service
, factory
, provider
или value
. См. Документы здесь.
Если вы хотите украсить директиву, вы можете создать другую директиву с тем же именем. Обе директивы будут использоваться при компиляции DOM, и вы можете определить порядок компиляции, используя приоритет.
В качестве альтернативы, если вы можете изменить код, который использует директиву, которую вы пытаетесь украсить, вы можете просто создать новую директиву, которая использует оригинал в своем шаблоне.