2017-02-23 4 views
2

動的に作成された埋め込みビューにコンテキストデータを渡そうとしています。角度 - createEmbeddedViewでコンテキストを設定する

注:私はここで角度2.4.7

を使用していますが、私が達成しwhantものです:私のDialogPresetComponent(ダイアログのプリセットで


。 component.html)

このコンポーネントのビューには、私のダイアログ・フレームワーク内で使用する準備ができてテンプレートの束が含まれています。

<template #presetInfo> 
    {{options.description}} // Note this binding ! Here is the problem 
</template> 

それでも、このコンポーネントでは、私はこのようなものをテンプレートに参照を取得します:

@ViewChild('presetInfo', { read: TemplateRef }) presetInfo: TemplateRef<any>; 

その後、私は店このtemplateRefはDialogService内にあるので、後でアクセスすることができます。

<div class='c-header'> 
</div> 
<div class='c-body'> 
    <div #container></div> 
</div> 
<div class='c-footer'> 
</div> 

DialogComponent(ダイアログ:ここ

は私のモーダルのテンプレートです:DialogComponent(dialog.component.html)


.component.ts):私のDialogComponentグラブで

このようなコンテナへの参照:

options: DialogOptions = { title: 'Dialog title' }; 

:テンプレートを注入し、私はまた、私は私のdynamiclyからアクセスしたい属性を定義

@ViewChild('container', {read: ViewContainerRef }) containerRef: ViewContainerRef; 

私は何をしようとしていますか:

私はテンプレート#presetInfo #container内と

だから、finaly私DialogComponentの文脈でを入れしようとしている、私はそれに権利を与え、私のコンポーネントで私のテンプレートを注入しますコンテキスト:私のDialogComponent(dialog.componentで

。TS)

// Where templateRef is the template previously defined in DialogPresetComponent 
createEmbeddedView(templateRef: TemplateRef<any>) { 
    this.containerRef.createEmbeddedView(templateRef, this);  
} 

私の注入されたテンプレートで結合{{}} options.descriptionは(「この」右のコンテキストを渡す場合でも、動作しないという事実から来る問題私の場合はcreateEmbeddedView経由)。

フレームワークは、オプションが定義されていないことを教えてくれます。

ここには何が欠けていますか?

あり、この「文脈」のものについてのドキュメントの多くはないので、私はそれを正しい方法でやっていないんだと思います....

任意の手がかりやヒントを歓迎します!

ありがとうございます!

+0

「this」をコンテキストとして渡しているようです。これは意図的ですか? –

+1

はい、これは意図的なことですが、「これ」を渡すと、すべてのコンポーネントメンバーがインクルードされたテンプレートから利用できるようになります。 私のテンプレートがコンポーネントビューの一部だったのと同じように... – Clement

答えて

5
this.containerRef.createEmbeddedView(templateRef, {$implicit: {description: 'some description'} });  
<template #presetInfo let-options> 
    {{options.description}} // Note this binding ! Here is the problem 
</template> 

、プロパティ$implicitでオブジェクトを渡す場合、ただlet-xxxは、テンプレート内のxxxとして$implicit値を使用可能にするのに十分です。

その他のプロパティの場合はlet-yyy="someProp"がテンプレート内で利用できるようにするにはyyyが必要です。

+0

その仕事! ありがとう、この$暗黙の属性とあなたが説明する規則に関する文書はどこから手に入りましたか? 角度ソースコードからですか? – Clement

+0

Angular2 GitHub issueまたはPull Requestsの議論でそれを確認しました。正確には覚えていないが、私はAngular2の開発に2016年の間に非常に密接に従っていた。 –

+0

ニース!ありがとう – Clement

関連する問題