テンプレートを渡すコンポーネントがあります。このコンポーネントの内部で、データを表示できるようにコンテキストを渡したいと思います。
@Component({
selector: 'my-component',
providers: [],
template: `
<template [ngTemplateOutlet]="templ" [ngOutletContext]="{isVisible: true}">
</template>
`
})
export class MyElementComponent implements OnInit {
@ContentChild(TemplateRef) templ;
constructor(){}
}
他のコンポーネントの内部でコンポーネントを使用する場合:
<my-component>
<template>
{{isVisible ? 'yes!' : 'no'}}
</template>
</my-component>
したがって、my-component
では、_@ContentChild
によってクラスで処理されるテンプレートを、templ
という名前で渡します。
次に、my-component
のテンプレートでtempl
をngTemplateOutlet
に渡しています。さらに、ngOutletContext
をisVisible
に設定したtrue
を使用してコンテキストを渡しています。
画面にyes!
が表示されるはずですが、コンテキストが渡されないようです。
私のangularバージョン:
"@angular/common": "^2.3.1",
"@angular/compiler": "^2.3.1",
"@angular/core": "^2.3.1",
久しぶりに作りました。
単一の値の例:
@Component({
selector: 'my-component',
providers: [],
template: `
<template [ngTemplateOutlet]="templ" [ngOutletContext]="{isVisible: true}">
</template>
`
})
export class MyElementComponent implements OnInit {
@ContentChild(TemplateRef) templ;
constructor(){}
}
<my-component>
<template let-isVisible="isVisible">
{{isVisible ? 'yes!' : 'no'}}
</template>
</my-component>
ループの例:
@Component({
selector: 'my-component',
providers: [],
template: `
<div *ngFor="let element of data">
<template [ngTemplateOutlet]="templ" [ngOutletContext]="{element: element}">
</template>
</div>
`
})
export class MyElementComponent implements OnInit {
@ContentChild(TemplateRef) templ;
constructor(){
this.data = [{name:'John'}, {name:'Jacob'}];
}
}
---
<my-component>
<template let-element="element">
{{element.name}}
</template>
</my-component>
結果:
<div>John</div>
<div>Jacob</div>
ヘッドアップngOutletContextは非推奨になり、ngTemplateOutletContextに名前が変更されました。
変更ログで「NgTemplateOutlet#ngTemplateOutletContext」を検索します