2017-04-10 4 views
6

私は、ajaxリクエストによってサーバーからデータをロードしています。 JSONファイルには、サイト内のポップアップの設定があります。angular2で動的データを文字列に補間します。

popupData: { 
    data:{ var_one: "hello", var_two: "world"}, 
    template: "the <b>{{var_two}}</b> say's {{var_one}}" 
} 

変数名とテンプレートは、ポップアップが発生するたびに異なります。

この文字列をどのように補間することができますか? [innerHTML]を使用して表示するコンポーネントにあらかじめ作成された文字列を渡す必要があります。どこか

+0

私は何か不足しているかもしれませんが、テンプレートリテラルのヘルプはここにありませんか? 'template \' $ {var_two} say $ {var_one} \ '' –

+0

JSONでテンプレートを保存することはできません –

+0

これは良い 'olセレクタで行うことができます。私はHTMLフラグメントをロードするポップアップコンポーネントを持っています(私はルータのURLフラグメントに値を渡し、ポップアップコンポーネントでそれを読み込み、指定されたHTMLページ/フラグメントをコンテンツとして読み込みます)。そのフラグメントに可変データをロードする必要がある場合、セレクタを使用します:querySelector( '#popup_some_style_or_id_selector').innerHTML。= [任意の値]。角度1では、ロードされたフラグメントはng-includeを使用してコントローラのvalにアクセスできます。 Ang 2/4には入っていない。それはAngularがまだ徹底的に取り除かなければならないことの1つです。 –

答えて

3

データを受信した後:

const popupString = popupData.template.replace(
    /{{\s?([^{}\s]*)\s?}}/g, 
    (substring, parsedKey) => { 
    const replacer = popupData.data[parsedKey]; 
    return typeof replacer !== 'undefined' ? replacer : substring; 
    } 
); 

それはあなたの例ではthe <b>world</b> says Helloに等しくなければなりません。

このコードはrobisim74’s angular-l10n(MITライセンス)から得られます。

+0

それは動作します!私は何かの角度に組み込むことを望んでいましたが。私の他の選択肢は、口ひげまたはハンドルバーのテンプレートを使用することでした。あなた自身の補間を角度の中で回転させなければならないのはちょっと変わったようです。 –