2017-01-30 1 views
0

Ich muss die Vorlage dynamisch abhängig vom gesendeten Layout rendern (für jetzt haben wir Original und Alternative).AngularJS Bindeschablone Variable

In der Anfang war ich manuell in den HTML-Tracker. Wie folgt aus:

<component layout="original"></component> 

Komponentenvorlage:

template: ($element, $attrs) => { 
    let process = 'original'; 
    if ($attrs.layout) { 
     process = $attrs.layout; 
    } 
    return require(`./templates/${process}.html`); 
    } 

Aber jetzt muss ich die Variable kompilieren nach. Zum Beispiel:

<component layout="{{vm.templateType}}"></component> 

Aber wenn ich die $attrs im template Acess die Winkel nicht kompiliert und das Ergebnis ist die Zeichenfolge wie folgt: "{{vm.templateType}}".

Es gibt eine Möglichkeit, die Vorlagenkompilierung vor dem Ausführen der Vorlagenfunktion zu erzwingen?

+0

Haben Sie versucht [ngSwitch] (https://docs.angularjs.org/api/ng/directive/ngSwitch)? – NonPolynomial

+0

Verwenden Sie nicht '{{}}' im HTML, 'layout =" vm.templateType "' sollte Ihnen den Wert geben, den Sie brauchen. – Claies

+0

Nein, ich kann nicht darauf zugreifen. Ich versuche, über die Vorlage darauf zuzugreifen, um die korrekte Vorlage zurückzugeben, und habe keinen Zugriff auf diese "Variablen". –

Antwort

0

Dies ist ein Problem in AngularJS, das Sie hier diskutieren können: #2895 und #13526.

es zu lösen ich die $compile in der Steuerung wie folgt zu verwenden hatte:

this.$onChanges = function (obj) { 
    const layout = require(`./templates/${obj.layout.currentValue}.html`); 
    $element.append($compile(layout)($scope)); 
}; 

Und die Vorlage attr der Komponente entfernen.