Ich bin gespannt, ob es eine Möglichkeit gibt, einzelne, spezifische Vorlagen aus der Datei ui-bootstrap-tpls zu überschreiben. Die überwiegende Mehrheit der Standardvorlagen entspricht meinen Anforderungen, aber es gibt einige spezifische Vorlagen, die ich ersetzen möchte, ohne den gesamten Prozess des Erfassens aller Standardvorlagen und der Verkabelung mit der Nicht-TPLS-Version durchlaufen zu müssen.
angularjs
angular-ui
angular-ui-bootstrap
Jeremy Privett
quelle
quelle
$modal
Service dekoriert habe , um mehr Konfigurierbarkeit zu erzielen, ohne (hoffentlich) zu viel Wartungsaufwand zu verursachen.$provide.decorator('$modal'
... In meinem Fall wollte ich dasmodalWindow
Element nicht rendern . Je. Ich habe es einfach nicht benutzt und das war das Beste, was ich mir einfallen lassen konnte. Ich würde gerne einen besseren Weg hören, wenn jemand es hat.Antworten:
Ja, Direktiven von http://angular-ui.github.io/bootstrap sind in hohem Maße anpassbar und es ist einfach, eine der Vorlagen zu überschreiben (und sich für andere Direktiven weiterhin auf die Standardvorlagen zu verlassen).
Es reicht aus, sie zu füttern
$templateCache
, entweder direkt (wie in derui-bootstrap-tpls
Datei) oder - wahrscheinlich einfacher - eine Vorlage mithilfe der<script>
Direktive ( doc ) zu überschreiben .Ein konstruiertes Beispiel , wo ich alert die Vorlage Swap bin Wechsel
x
fürClose
unten dargestellt:Live-Plunker: http://plnkr.co/edit/gyjVMBxa3fToYTFJtnij?p=preview
quelle
Verwenden von
$provide.decorator
Durch die Verwendung
$provide
zum Dekorieren der Direktive wird vermieden, dass direkt damit herumgespielt werden muss$templateCache
.Erstellen Sie stattdessen Ihre externe HTML-Vorlage wie gewohnt mit einem beliebigen Namen und überschreiben Sie dann die Anweisungen,
templateUrl
um darauf zu verweisen.Fork von pkozlowski.opensource ‚s plunkr: http://plnkr.co/edit/RE9AvUwEmKmAzem9mfpI?p=preview
(Beachten Sie, dass Sie das Suffix 'Direktive' an den Namen der Direktive anhängen müssen, die Sie dekorieren möchten. Oben dekorieren wir die
alert
Direktive von UI Bootstrap , daher verwenden wir den NamenalertDirective
.)Da Sie häufig mehr tun möchten, als nur die zu überschreiben
templateUrl
, bietet dies einen guten Ausgangspunkt, um die Direktive weiter zu erweitern, beispielsweise durch Überschreiben / Umschließen der Verknüpfungs- oder Kompilierungsfunktion ( zum Beispiel ).quelle
alertDirective
ein Schlüsselwort? Wenn ja, wofür lautet das SchlüsselwortTabs
? Ich versuche, ähnliche Dinge auf Registerkarten zu tun, aber ich habe die alert.js durchgesehen und sehe nicht, wo sie sichalertDirective
dort befanden .$compileProvider
fügt dem Namen Ihrer Direktive bei der Registrierung ein Suffix 'Direktive' hinzu ($filterProvider
ähnlich wie bei einem Suffix 'Filter'). Für die meisten Zwecke ist dies unsichtbar, aber beim Dekorieren müssen Sie dieses Suffix an die Direktive anhängen, auf die Sie abzielen möchten. Zum BeispieltabDirective
odertabsetDirective
usw. Nicht genau klar dokumentiert, wo ich sie finden konnte, aber hier ist ein Hinweis auf das ähnliche Verhalten$filterProvider
zumindest für: docs.angularjs.org/api/ng/provider/$filterProviderfunction(element, attributes)
TemplateUrl bereitstellen . Sie können dies für ein dynamisches Verhalten verwenden (geben Sie die ursprüngliche templateUrl-Funktion oder Ihre eigene URL-Zeichenfolge zurück, abhängig von einem Attribut usw.). Ui.bootstrap verwendet jetzt jedoch auch dieselbe Funktionalität, mit der Sie eintemplate-url
Attribut für eine Direktive angeben können. Sie können dies also möglicherweise auch verwenden, wenn Sie den Vorlagenpfad direkt über das Direktivenelementattribut bereitstellen möchten .Die Antwort von pkozlowski.opensource ist wirklich nützlich und hat mir sehr geholfen! Ich habe es in meinem Zustand so angepasst, dass eine einzige Datei alle meine Winkelvorlagenüberschreibungen definiert, und das externe JS geladen, um die Nutzlastgröße gering zu halten.
Gehen Sie dazu zum Ende der eckigen UI-Bootstrap-Quell-JS-Datei (z. B.
ui-bootstrap-tpls-0.6.0.js
) und suchen Sie die Vorlage, an der Sie interessiert sind. Kopieren Sie den gesamten Block, der die Vorlage definiert, und fügen Sie ihn in Ihre überschriebene JS-Datei ein.z.B
Fügen Sie dann einfach Ihre Overrides-Datei nach dem UI-Bootstrap hinzu und Sie erzielen das gleiche Ergebnis.
Gegabelte Version von pkozlowski.opensources Plunk http://plnkr.co/edit/iF5xw2YTrQ0IAalAYiAg?p=preview
quelle
Sie können
template-url="/app/.../_something.template.html"
die aktuelle Vorlage für diese Anweisung überschreiben.(Funktioniert mindestens in Accordion Bootstrap.)
quelle