Usando $provide.decorator
Usar $provide
para 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 templateUrl
para 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 alert
diretiva 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 ).
$modal
serviç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 omodalWindow
elemento. 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.