単一コンテンツ投影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 パーティション形式のルート ディレクトリを縮小する方法
スタイルシートCSS (カスケーディング スタイル シート) は、HTML Web ページを美しくす...
目次1. Nginxは負荷分散の原則を実装する2. Nginxの動的および静的分離の原則Nginx ...
デザイナーは独自のフォント ライブラリを持っているため、プロジェクトの設計時にすぐに使用できます。今...
序文何年も前、私はサーバー側の初心者でしたが、業界の競争が激しくなるにつれて、フロントエンドの初心者...
proxy_intercept_errors と recursive_error_pages を使...
この記事では、例を使用して MySQL の共有ロックと排他ロックの使用方法を説明します。ご参考までに...
1. スタイルシートの先頭にコメント ブロックを追加して、スタイルシートの作成日、作成者、タグ、その...
MySQL ストレージ エンジンの概要ストレージ エンジンとは何ですか? MySQL のデータは、さ...
目次序文困難クロスドメイン定義nginxの機能リバースプロキシ静的と動的の分離達成しようとする最終結...
概要: 2 つの MySQL SQL ステートメント ロックの分析次のSQL文にどのようなロックが追...
目次1. パッケージ化コマンドを追加する2. パッケージ化されたコードを実行する3. パッケージ化し...
序文インターネット上には、MySQL でインデックスにヒットできないさまざまな状況をまとめた記事がよ...
チェックボックスは Web ページで非常によく使用されます。e コマースの Web サイトでもプラッ...
# には位置情報が含まれます。デフォルトのアンカーは #top で、これは Web ページの上部です...
フォーマットはシンプルです: proxy_pass URL; URL には、送信プロトコル (htt...