Використовуючи $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
(Зверніть увагу, що ви повинні додати суфікс „Директива“ до назви директиви, яку ви збираєтеся прикрасити. Вище ми прикрашаємо alert
директиву Bootstrap інтерфейсу користувача , тому ми використовуємо це ім’я alertDirective
.)
Оскільки вам часто хочеться зробити більше, ніж просто перевизначити templateUrl
, це забезпечує гарну вихідну точку для подальшого розширення директиви, наприклад, замінивши / обернувши посилання або функцію компіляції ( наприклад ).
$modal
послугу, щоб отримати більше можливостей налаштування, не створюючи (сподіваюся) занадто сильного головного болю в обслуговуванні.$provide.decorator('$modal'
... У моєму випадку я не хотів відображатиmodalWindow
елемент. Ніколи. Я просто не використовував його, і це було найкраще, що я міг придумати. Я хотів би почути кращий спосіб, якщо хтось його має.