Je suis curieux de savoir s’il existe un moyen de remplacer des modèles spécifiques à partir du fichier ui-bootstrap-tpls. La grande majorité des modèles par défaut correspond à mes besoins, mais il y a quelques modèles spécifiques que je voudrais remplacer sans passer par tout le processus de saisie de tous les modèles par défaut et de les connecter à la version non TPL.
Oui, les directives de http://angular-ui.github.io/bootstrap sont hautement personnalisables et il est facile de remplacer l’un des modèles (et de toujours compter sur les modèles par défaut pour les autres directives).
Il suffit de nourrir $templateCache
, soit en l’alimentant directement (comme dans le fichier ui-bootstrap-tpls
), soit – probablement plus simple – pour remplacer un template en utilisant la directive ( doc ).
Un exemple inventif où je change le modèle d'alerte pour permuter x
pour Close
est illustré ci-dessous:
{{alert.msg}}
Plunker en direct: http://plnkr.co/edit/gyjVMBxa3fToYTFJtnij?p=preview
$provide.decorator
Utiliser $provide
pour décorer la directive évite d’avoir à manipuler directement $templateCache
.
Au lieu de cela, créez votre modèle HTML externe comme vous le feriez normalement, avec le nom de votre choix, puis remplacez la directive templateUrl
la directive pour la 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; }); }
Fork of plunkr de pkozlowski.opensource: http://plnkr.co/edit/RE9AvUwEmKmAzem9mfpI?p=preview
(Notez que vous devez append le suffixe “Directive” au nom de la directive que vous avez l’intention de décorer. Au-dessus, nous décorons la directive d’ alert
interface utilisateur Bootstrap, nous utilisons donc le nom alertDirective
.)
Comme vous pouvez souvent vouloir faire plus que remplacer simplement templateUrl
, cela fournit un bon sharepoint départ pour étendre davantage la directive, par exemple en remplaçant / encapsulant le lien ou la fonction de compilation ( par exemple ).
La réponse de pkozlowski.opensource est vraiment utile et m’a beaucoup aidé! Je l’ai modifié dans ma condition pour avoir un fichier unique définissant tous mes remplacements de modèles angulars et chargé le JS externe pour maintenir la taille de la charge utile.
Pour ce faire, allez au bas du fichier source angular ui-bootstrap js (par exemple, ui-bootstrap-tpls-0.6.0.js
) et trouvez le modèle qui vous intéresse. Copiez le bloc entier qui définit le modèle et collez-le il dans votre fichier de remplacement JS.
par exemple
angular.module("template/alert/alert.html", []).run(["$templateCache", function($templateCache) { $templateCache.put("template/alert/alert.html", " \n" + " \n" + " \n" + " "); }]);
Ensuite, il vous suffit d’inclure votre fichier de remplacement après ui-bootstrap et vous obtiendrez le même résultat.
Version fourchue du plunk de pkozlowski.opensource http://plnkr.co/edit/iF5xw2YTrQ0IAalAYiAg?p=preview
Vous pouvez utiliser template-url="/app/.../_something.template.html"
pour remplacer le modèle actuel de cette directive.
(Fonctionne au moins dans Bootstrap en accordéon.)