Za pomocą $provide.decorator
Użycie $provide
dyrektywy do dekoracji pozwala uniknąć bezpośredniego bałaganu $templateCache
.
Zamiast tego utwórz swój zewnętrzny szablon html, jak zwykle, z dowolną nazwą, a następnie nadpisz dyrektywy, templateUrl
aby na to wskazać.
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;
});
}
Widelec plunkr pkozlowski.opensource: http://plnkr.co/edit/RE9AvUwEmKmAzem9mfpI?p=preview
(Zauważ, że musisz dodać przyrostek „Dyrektywa” do nazwy dyrektywy, którą chcesz ozdobić. Powyżej dekorujemy alert
dyrektywę UI Bootstrap , więc używamy nazwy alertDirective
).
Ponieważ często możesz chcieć zrobić coś więcej niż tylko nadpisać templateUrl
, jest to dobry punkt wyjścia do dalszego rozszerzania dyrektywy, na przykład przez przesłonięcie / zawinięcie linku lub funkcji kompilującej ( na przykład ).
$modal
usługę, aby uzyskać większą konfigurowalność bez (miejmy nadzieję) wywoływania zbyt dużego bólu głowy związanego z konserwacją.$provide.decorator('$modal'
... W moim przypadku nie chciałem renderowaćmodalWindow
elementu. Zawsze. Po prostu go nie używałem i to było najlepsze, na co mogłem wymyślić. Chciałbym lepiej usłyszeć, gdyby ktoś to miał.