単一コンテンツ投影ng-contentを使用して実装する <!-- コンポーネント- app-content-single --> <div> <h2>タイトル</h2> <!-- 投影コンテンツの表示位置 --> <コンテンツ></コンテンツ> </div> <!-- 使用法 --> <アプリコンテンツシングル> <div>これはコンテンツです</div> </アプリコンテンツシングル> マルチコンテンツ投影
<!-- コンポーネント- app-content-more --> <div> <h3>牧夫の称号</h3> <ng-content select=".header"></ng-content> <h3>本文タイトル</h3> <ng-content select="[本文]"></ng-content> <h3>デフォルトのタイトル</h3> <コンテンツ></コンテンツ> <h3>フッタータイトル</h3> <ng-content select="フッター"></ng-content> </div> <!-- 使用法 --> <アプリコンテンツの詳細> <div>これは default01 です</div> <div class="header">これはヘッダーです</div> <div>これは default02 です</div> <div body>これが本文です</div> <div>これは default03 です</div> <footer>これはフッターです</footer> <div>これは default04 です</div> </アプリコンテンツ> 条件付きコンテンツ投影- 単一条件のコンテンツ投影例えば、現在人々のリストがあるとします。ある人のお金が200を超えると、コンポーネントのテンプレートで定義されたコンテンツが追加されます。 ng-templateと連携してテンプレートを取得するためにappChildRefディレクティブを定義する '@angular/core' から Directive、TemplateRef をインポートします。 @指令({ セレクター: '[appChildRef]' }) エクスポートクラスChildRefDirective { コンストラクター(パブリックテンプレートRef: TemplateRef<any>) { } } アプリ-人物-html<div class="list-item" *ngFor="let person of persons;"> <div>名前: {{ person.name }}}</div> <div>お金: {{ person.money }}</div> <div *ngIf="人.お金> 200"> <ng-container *ngIf="childRef" [ngTemplateOutlet]="childRef.templateRef"></ng-container> </div> </div> アプリ担当者 - ts'@angular/core' から Component、ContentChild、OnInit をインポートします。 '../../../../directives/child-ref.directive' から { ChildRefDirective } をインポートします。 @成分({ セレクタ: 'app-persons'、 テンプレート URL: './persons.component.html', スタイル URL: ['./persons.component.scss'] }) エクスポートクラスPersonsComponentはOnInitを実装します{ 人: { 名前: 文字列; お金: 数値; }[] = [ { 名前: 'ジャック', お金: 120 }, { 名前: 'Li Li', お金: 210 }, { 名前: '張三', お金: 170 }, ]; ChildRefDirective は、コンテンツ オブジェクトの子として宣言されます。 コンストラクタ() { } ngOnInit(): void { } } 使用<アプリの人物> <ng-template アプリの子参照> <div style="font-size: 14px; color: red;">これは子参照コンテンツです</div> </ng-テンプレート> </app-persons> レンダリング複数の条件付きコンテンツ投影例: 埋め込みテンプレートをバインドして、人物データのフィールドを通じて表示したいとします。 appChildRef 調整'@angular/core' から Directive、Input、TemplateRef をインポートします。 @指令({ セレクター: '[appChildRef]' }) エクスポートクラスChildRefDirective { // 定義されたテンプレート名を受け入れ、この名前と persons のレンダリング フィールドを通じて対応するテンプレート コンテンツを表示します @Input() appChildRef!: string; コンストラクター(パブリックテンプレートRef: TemplateRef<any>) { } } アプリ-人物-html<div class="list-item" *ngFor="let person of persons;let i=index;"> <div>名前: {{ person.name }}}</div> <div>お金: {{ person.money }}</div> <!-- <div *ngIf="person.money > 200"> <ng-container *ngIf="childRef" [ngTemplateOutlet]="childRef.templateRef"></ng-container> </div> --> <div *ngIf="person.render && tempRefs[person.render]"> <!-- ngTemplateOutlet ディレクティブを使用して、現在の人物データをテンプレートに渡します --> <ng-container *ngTemplateOutlet="tempRefs[person.render].templateRef; コンテキスト: { $implicit: person, i: i }"></ng-container> </div> </div> アプリ担当者 - ts'@angular/core' から Component、ContentChild、ContentChildren、OnInit、QueryList をインポートします。 '../../../../directives/child-ref.directive' から { ChildRefDirective } をインポートします。 @成分({ セレクター: 'app-form-unit', テンプレート URL: './form-unit.component.html', スタイル URL: ['./form-unit.component.scss'] }) エクスポートクラスFormUnitComponentはOnInitを実装します{ persons: { name: 文字列; money: 数値; render?: 文字列; }[] = [ { 名前: 'ジャック', お金: 120, レンダリング: 'temp1' }, { name: '李璃', money: 210, render: 'temp2' }, { name: '张三', money: 170, render: 'temp3' }, ]; // @ContentChild(ChildRefDirective, { static: true }) childRef!: ChildRefDirective; @ContentChildren(ChildRefDirective) childrenRef!: QueryList<ChildRefDirective>; tempRefs() を取得する { 定数 aObj: 任意 = {}; this.childrenRef.forEach(テンプレート => { 定数キー: string = template.appChildRef; aObj[キー] = テンプレート; }) aObj を返します。 } コンストラクタ() { } ngOnInit(): void { } } 使用<アプリの人物> <ng-template appChildRef="temp1" let-person let-index="i"> <div style="font-size: 14px; color: red;">{{index}}-{{person.name}}: これは temp1 です</div> </ng-テンプレート> <ng-template appChildRef="temp2" let-person let-index="i"> <div style="font-size: 14px; color: green;">{{index}}-{{person.name}}: これは temp2 です</div> </ng-テンプレート> <ng-template appChildRef="temp3" let-person let-index="i"> <div style="font-size: 14px; color: orange;">{{index}}-{{person.name}}: これは temp3 です</div> </ng-テンプレート> </app-persons> レンダリング要約するこの記事はこれで終わりです。皆さんのお役に立てれば幸いです。また、123WORDPRESS.COM のその他のコンテンツにも注目していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: Linux で XFS パーティション形式のルート ディレクトリを縮小する方法
目次VMware バープスイート1. 仮想マシンイメージとVMwareのインストールと使用2. 仮想...
例示するこの記事は、2017 年 5 月 20 日に MySQL-5.7.18 を使用して作成されま...
目次導入子プロセスプロセスを非同期的に作成する同期作成プロセス導入Node.js のメイン イベント...
HTML についてどれくらい知っていますか? 現在、基本的な HTML コードを学習している場合は、...
MACはmysql8.0をインストールします。具体的な内容は次のとおりです。 1. ダウンロードアド...
目次序文1. モナドの判断1.1 例1.2 オブジェクトに入れる1.3 マップに載せる2. 複数の判...
サーバーサイドレンダリング (SSR) を使用する理由検索エンジンのクローラーが完全にレンダリングさ...
目次1. ACIDの特性トランザクション制御構文3. トランザクション同時実行例外1. ダーティリー...
html: 実際には、テーブルタグに従っていくつかの実線の円 div を正六角形に配置し、div コ...
多くの場合、クエリの結果は最大で 1 つのデータ レコードになることが予想されます。この場合、制限 ...
この記事では、例を使用して、MySQL ビューの原理と基本操作を説明します。ご参考までに、詳細は以下...
目次1. これは2. この点を修正する1. call() メソッド2. apply() メソッド要約...
構文: ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY...
初心者は、いくつかの HTML タグを理解することで HTML を学習できます。この入門書は、初心者...
VMware の準備 CentOS の準備、こちらは CentOS 7.3 CentOS-7-x86...