アプリケーションレイアウトには、ツールバーと実際のコンテンツ領域があります。ツールバーは幾分複雑なDOM構造を持っているので、そこからコンポーネントを作成することにしました。テンプレートを動的に4/5の角度に配置する
我々は、各ページに、このコンポーネントを再利用できるが、ツールバーの位置は、(いくつかの他の成分が間にある)、実際のコンテンツの隣にはありません。したがって、親ページコンポーネントにツールバーを1回配置し、必要に応じて各ページにツールバーの内容を宣言するだけです。
我々は#tbcontent
の内容を取り、
#toolbar
内に置き、効果的にこのような何かレンダリングでしょう上の例ではこのように
<app>
<toolbar>
<ng-container #toolbar></ng-container>
</toolbar>
<some unrelated component>...</some unrelated component>
<content>
<ng-template #tbcontent>
<button>Click me!</button>
</ng-template>
<p>Actual page content!</p>
</content>
</app>
:我々は#toolbar
とから#tbcontent
ノードの両方を照会しようとしている
<app>
<toolbar>
<button>Click me!</button>
</toolbar>
<some unrelated component>...</some unrelated component>
<content>
<p>Actual page content!</p>
</content>
</app>
をルートAppComponent
@ViewChild
を使用します(コードは分かりやすくするために簡略化されています)。
@Component({
/* ... */
})
export class AppComponent implements OnInit, AfterViewInit {
@ViewChild("tbcontent") tbcontent: TemplateRef<any>;
@ViewChild("toolbar", {read: ViewContainerRef}) toolbar: ViewContainerRef;
/* ... */
ngAfterViewInit() {
console.log('ngAfterViewInit');
console.log(this.tbcontent);
console.log(this.toolbar);
this.toolbar.createEmbeddedView(this.tbcontent);
}
}
しかし両方の参考文献はundefined
です。要素に正しくアクセスする方法はありますか?これは実際には悪い習慣ですか、同じ結果を達成するためのより良い方法があるかもしれませんか?
アップデート:@マーティン-NUCの親切が、トリックを行うように思われ、*ngTemplateOutlet
を使用して提案した場合にのみ、同じコンポーネント内での生活をコピーされたノード。ここでは、このを示すJSFiddleです:
https://jsfiddle.net/carlosafonso/k3oq56oq/3/
ありがとうございました。
''また、コンポーネントのですか? –
はい、それはかなりのダミーのものですが(たぶんタグを含んでいます)。 –
cafonso
' 'の外にテンプレートを定義できますか?念のために。私の答えを見てください。 –