2017-11-16 16 views
1

子コンポーネントに渡すことができる親コンポーネントでいくつかのhtmlを定義しようとしています。これは可能ですか?私はこれのようなものを試しました:How to pass an expression to a component as an input in Angular2?、しかし私は運がなかった。たぶん私の構文が間違っていた。私は少しletと混同していました。私はこれをより良く理解するのを助けるために、すべてのヘルプと説明を感謝します。親から子へのhtmlの定義

@Component({ 
    selector: 'app-my-child', 
    template: ` 
    <div>other child html</div> 
    <ng-content></ng-content> 
    ` 
}) 
export class MyChild { 
} 

は、あなたがng-を削除する必要があります。

@Component({ 
    selector: 'app-my-parent', 
    template: ` 
    <div>other parent html</div> 
    <app-my-child [property]="value"> 
     <ng-template #someTemplate">value.first</ng-template> 
    </app-my-child> 
    <app-my-child [property]="value"> 
     <ng-template #someTemplate">value.second</ng-template> 
    </app-my-child> 
    ` 
}) 
export class MyParent { 
} 

@Component({ 
    selector: 'app-my-child', 
    template: ` 
    <div>other child html</div> 
    how do I access the template from here? Is there a way to do binding with templates? 
    ` 
}) 
export class MyChild { 
     @Input() property; 
} 
+0

親と子の両方で同じテンプレートにアクセスしようとしていますか?その場合は、別のファイルを作成し、テンプレートの代わりにtemplateurlを使用してください。 – Notmfb

+0

いいえ、私は親と子の両方に同じテンプレートが必要ないです。他のHTMLもありますが、テンプレート全体を置き換えたくありません。 – gonzo

答えて

2

は、あなたはコンテンツをtranscludeことになっています知っていて、どこコンテンツを置くために、あなたの子コンポーネントので、角にNG-コンテンツのタグを追加する必要がありますテンプレートタグ、それは彼らがテンプレートが親にそれを使用して他の場所で

使用されることを意図しているので、実際に、すべてのこれらの事をレンダリングしないように、角度指示するための超簡単です:

<app-my-child>Anything put between these component tags will be transcluded to the ng-content tag</app-my-child> 
+0

それで、子の 'ng-content'は、どの要素を親で探すべきかを知っています。またはそれらはどのようにリンクされていますか? – gonzo

+0

あなたが1つのng-contentしか持っていない場合、componenteタグの中の何物もそのゾーンに入り込みます。 so これはすべて、子コンポーネントのng-contentタグの間に表示されますが、同じコンポーネントに複数のng-contentタグが必要な場合は、どの項目がどこに行くのかを示すセレクタを使用します。しかし、あなたはここにその問題がないようです。 – bryan60

+0

新しいコンポーネントを導入するとどうなりますか?それで、それはテーブルと行であると言うことができます。私はいくつかの行htmlを含めるが、テーブルテンプレートからアクセスしたい。私は新しい質問を作成し、ここにリンクします。私はあなたの説明でより良いコンセプトを理解しています。ありがとうございました。 – gonzo

1

@ bryan60が指摘したように、子テンプレートには<ng-content>が必要です。 AfterContentInit()ライフサイクルフックが実行される直前に、親では、あなたは子供セレクタ内に置くすべてのものはNG-コンテンツの位置に表示されます。

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

<child-cmp> 
    <p>This will appear within ng-content of ChildComponent</p> 
</child-cmp> 

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

<h2>I am ChildComponent</h2> 
    <ng-content></ng-content> 

Live demo

+0

デモをいただきありがとうございます。ありがとう。 – gonzo

関連する問題