En utilisant $provide.decorator
Utiliser $provide
pour décorer la directive évite d'avoir à jouer directement avec $templateCache
.
Au lieu de cela, créez votre modèle externe html comme vous le feriez normalement, avec le nom que vous voulez, puis remplacez la directive templateUrl
pour y pointer.
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;
});
}
Fourche du plunkr de pkozlowski.opensource: http://plnkr.co/edit/RE9AvUwEmKmAzem9mfpI?p=preview
(Notez que vous devez ajouter le suffixe "Directive" au nom de la directive que vous souhaitez décorer. Ci-dessus, nous décorons la alert
directive de UI Bootstrap , nous utilisons donc le nom alertDirective
.)
Comme vous pouvez souvent vouloir faire plus que simplement remplacer le templateUrl
, cela fournit un bon point de départ pour étendre davantage la directive, par exemple en surchargeant / encapsulant le lien ou la fonction de compilation ( par exemple ).
$modal
service pour obtenir plus de configurabilité sans (espérons-le) créer trop de casse-tête de maintenance.$provide.decorator('$modal'
... Dans mon cas, je ne voulais pas rendre l'modalWindow
élément. Déjà. Je ne l'utilisais tout simplement pas, et c'était le mieux que je pouvais trouver. J'adorerais entendre une meilleure façon si quelqu'un l'a.