So erstellen Sie eine Richtlinie auf eine dynamische Vorlage in AngularJS?
Wie kann ich erstellen Sie eine Richtlinie mit einem dynamischen template?
'use strict';
app.directive('ngFormField', function($compile) {
return {
transclude: true,
scope: {
label: '@'
},
template: '<label for="user_email">{{label}}</label>',
//append
replace: true,
//attribute restriction
restrict: 'E',
//linking method
link: function($scope, element, attrs) {
switch (attrs['type']) {
case "text":
//append input field to "template"
case "select":
//append select dropdown to "template"
}
}
}
});
<ng-form-field label="First Name" type="text"></ng-form-field>
Dies ist, was ich jetzt haben, und es zeigt die Bezeichnung korrekt. Allerdings bin ich mir nicht sicher, wie das Anhängen zusätzlicher HTML-Vorlage. Oder die Kombination von 2 Vorlagen in 1.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hatte ein ähnliches Bedürfnis.
$compile
der job nicht. (Nicht ganz sicher, ob dies "DER" Weg, es zu tun, arbeiten noch meinen Weg durch Winkel -)http://jsbin.com/ebuhuv/7/edit - meine exploration-test.
Eine Sache zu beachten (gemäß meinem Beispiel), eine meiner Anforderungen war, dass die Vorlage würde sich ändern, basierend auf einer
type
Attribut nachdem Sie auf speichern geklickt, und die Vorlagen waren sehr unterschiedlich. So aber kriegst du die Daten verbindlich, wenn nötig, eine neue Vorlage gibt, müssen Sie neu kompilieren zu müssen.habe ich die $templateCache zu erreichen etwas ähnliches. ich legte einige ng-Vorlagen in einer einzigen html-Datei, die ich-Referenz mit der Richtlinie templateUrl. sorgt dafür, dass das html-Format, um den template-cache. dann kann ich wählen Sie einfach per id zu bekommen, die ng-Vorlage, die ich möchte.
template.html:
Richtlinie:
$compile(element.contents())
. War verrückt, weil ich nicht wusste etwa, dass.contents()
ìn$compile
. (Endlosschleife aufrufen meiner Richtlinie, natürlich)replace: true
Richtlinie.replace: true
in der Richtlinie. Durch Zufall wissen Sie, wie Sie es beheben?replace: true
.getTemplate()
Funktion nur, um die link-Funktion sauber. ich könnte inline-es, ja, aber wenn es eine Menge von code, um die Daten analysieren und entscheiden, welche Vorlage Sie verwenden, kann es zu verschleiern, die wichtige Letzte 2 Zeilen von der link-Funktion. Und ich bin ein fan von kleinen, single-function-Methoden sowieso.Sollten Sie Ihre Schalter in der Vorlage mit dem ' ng-switch " - Richtlinie:
Kann es verwenden, wie diese:
Wenn Sie verwenden möchten, AngularJs-Direktive, die mit der dynamischen Vorlage, die Sie verwenden können, diejenigen, die Antworten,Aber hier ist mehr professionelle und rechtliche syntax von es.Sie können templateUrl nicht nur mit dem einzelnen Wert.Sie können es verwenden, als eine Funktion,die einen Wert zurückgibt als url.Diese Funktion hat einige Argumente,die Sie verwenden können.
http://www.w3docs.com/snippets/angularjs/dynamically-change-template-url-in-angularjs-directives.html
Eine Möglichkeit ist die Verwendung einer template-Funktion in Ihrer Richtlinie:
Ich es geschafft, mit diesem problem umzugehen. Unten ist der link :
https://github.com/nakosung/ng-dynamic-template-example
mit der spezifischen Datei:
https://github.com/nakosung/ng-dynamic-template-example/blob/master/src/main.coffee
dynamicTemplate
Richtlinie hosts dynamische Vorlage, die übergeben wird, in Umfang und hosted-element verhält sich wie andere native eckigen Elementen.Habe ich in der gleichen situation, mein komplette Lösung gepostet wurde hier
Grundsätzlich habe ich eine Vorlage laden, die in der Richtlinie in dieser Weise
dann nach dem Wert
maxLength
undrequired
ich können dynamisch laden Sie eine der 2 Vorlagen, nur einer von Ihnen zu einem Zeitpunkt angezeigt wird, wenn notwendig.Ich heope es hilft.