2017-01-30 4 views
0

私は、送信されたレイアウトに応じてテンプレートを動的にレンダリングする必要があります(今のところオリジナルと代替があります)。AngularJSバインディングテンプレート変数

私はうまくいきましたが、私は手動でhtmlでトラッキングしていました。

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

コンポーネントテンプレート:

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

しかし、今、私は変数に従ってコンパイルする必要があり、このように。例えば:私はtemplate$attrsをアセスするとき

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

は、しかし、角度がコンパイルされていないと、結果はこのような文字列です:"{{vm.templateType}}"

テンプレート関数を実行する前に強制的にテンプレートをコンパイルする方法がありますか?

+0

[ngSwitch](https://docs.angularjs.org/api/ng/directive/ngSwitch)を試しましたか? – NonPolynomial

+0

HTMLで '{{}}'を使わないと、 'layout =" vm.templateType "は必要な値を与えるはずです。 – Claies

+0

いいえ、私はそれにアクセスできません。私は正しいテンプレートを返すためにテンプレートからアクセスしようとしています。この "変数"にはアクセスできません –

答えて

0

これはAngularJSの問題です。ここでは、#2895#13526の説明を確認できます。

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

とコンポーネントのテンプレートATTRを削除します。私はこのようなコントローラで$compileを使用していたそれを解決するために

関連する問題