Utilizando $provide.decorator
Usar $provide
para decorar la directiva evita la necesidad de jugar directamente con ella $templateCache
.
En su lugar, cree su plantilla html externa como lo haría normalmente, con el nombre que desee, y luego anule las directivas templateUrl
para señalarlo.
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;
});
}
Bifurcación del plunkr de pkozlowski.opensource: http://plnkr.co/edit/RE9AvUwEmKmAzem9mfpI?p=preview
(Tenga en cuenta que debe agregar el sufijo 'Directiva' al nombre de la directiva que desea decorar. Arriba, estamos decorando la alert
directiva UI Bootstrap , por lo que usamos el nombre alertDirective
).
Como a menudo puede querer hacer algo más que anular templateUrl
, esto proporciona un buen punto de partida desde el cual extender aún más la directiva, por ejemplo, anulando / ajustando el enlace o la función de compilación ( por ejemplo ).
$modal
servicio para obtener más capacidad de configuración sin (con suerte) crear demasiado dolor de cabeza de mantenimiento.$provide.decorator('$modal'
... En mi caso, no quería renderizar elmodalWindow
elemento. Siempre. Simplemente no lo estaba usando, y esto fue lo mejor que se me ocurrió. Me encantaría escuchar una mejor manera si alguien la tiene.