Usando $provide.decorator
Usar $providepara decorar a diretiva evita a necessidade de mexer diretamente com ela $templateCache.
Em vez disso, crie seu html de template externo como faria normalmente, com o nome que desejar, e então sobrescreva a diretiva templateUrlpara apontar para ele.
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;
});
}
Bifurcação do plunkr de pkozlowski.opensource: http://plnkr.co/edit/RE9AvUwEmKmAzem9mfpI?p=preview
(Observe que você deve anexar o sufixo 'Diretiva' ao nome da diretiva que pretende decorar. Acima, estamos decorando a alertdiretiva do UI Bootstrap , por isso usamos o nome alertDirective.)
Como muitas vezes você pode querer fazer mais do que apenas substituir o templateUrl, isso fornece um bom ponto de partida para estender ainda mais a diretiva, por exemplo, substituindo / agrupando o link ou a função de compilação ( por exemplo ).
$modalserviço para obter mais configurabilidade sem (espero) criar muita dor de cabeça de manutenção.$provide.decorator('$modal'... No meu caso, não queria renderizar omodalWindowelemento. Sempre. Eu simplesmente não estava usando, e isso foi o melhor que pude pensar. Eu adoraria ouvir uma maneira melhor, se alguém a tiver.