С помощью $provide.decorator
Использование $provide
для украшения директивы избавляет от необходимости напрямую возиться с ней $templateCache
.
Вместо этого создайте свой внешний шаблон html, как обычно, с любым именем, которое вам нравится, а затем переопределите директиву, templateUrl
чтобы указать на него.
angular.module('plunker', ['ui.bootstrap'])
.config(['$provide', Decorate]);
function Decorate($provide) {
$provide.decorator('alertDirective', function($delegate) {
var directive = $delegate[0];
directive.templateUrl = "alertOverride.tpl.html";
return $delegate;
});
}
Вилка плагина pkozlowski.opensource: http://plnkr.co/edit/RE9AvUwEmKmAzem9mfpI?p=preview
(Обратите внимание, что вы должны добавить суффикс «Directive» к имени директивы, которую собираетесь украсить. Выше мы украшаем alert
директиву UI Bootstrap , поэтому мы используем это имя alertDirective
.)
Поскольку вы часто можете захотеть сделать больше, чем просто переопределить templateUrl
, это обеспечивает хорошую отправную точку для дальнейшего расширения директивы, например, путем переопределения / переноса ссылки или функции компиляции ( например ).
$modal
службу, чтобы получить больше возможностей настройки, не создавая (надеюсь) слишком большой головной боли при обслуживании.$provide.decorator('$modal'
... В моем случае я не хотел отображатьmodalWindow
элемент. Когда-либо. Я просто не использовал его, и это было лучшее, что я мог придумать. Я хотел бы услышать лучший способ, если он у кого-нибудь есть.