単一コンテンツ投影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 パーティション形式のルート ディレクトリを縮小する方法
目次1. ファイルとディレクトリの基本的な保存2. Inコマンドの紹介(1)lnコマンドの基本情報を...
目次Reactにaxios依存関係をインストールして導入するGETリクエストにaxiosを使用するa...
目次コンセプト配列の分割値を個別に宣言して割り当てるデフォルト値の構造化解除変数値の交換関数によって...
現在、ほとんどのプロジェクトが Docker 上にデプロイされ始めていますが、デプロイのプロセスはま...
MySQL公式サイトのダウンロードアドレス: https://dev.mysql.com/downl...
目次1 はじめに2 前提条件2.1 データ型2.2 それが自身のプロパティであるかどうかを判断する ...
問題の説明Centos7 をローカルにインストールして 3 つの仮想マシンを作成し、Swarm クラ...
開発には常にデータが必要です。サーバーとしての Linux では、テスト データを格納するためのデー...
vsftpdをインストールする $ sudo apt-get install vsftpd -y v...
Win10はmysql5.7の解凍版をインストールします。参考までに、具体的な内容は次のとおりです...
目次双方向バインディングの原理ngモデルレンダリングカスタム双方向バインディングプロパティコンポーネ...
1. プラグインを追加し、pomファイルの下に次の設定を追加します。 <!-- mybatis...
目次1. ルートの遅延読み込みとは何ですか? 2. ルートの遅延読み込みの使用1. ルートの遅延読み...
序文最近、MySQL で RR レベルでデッドロック問題に遭遇しました。興味深いと思ったので、調べて...
MySQL で遅い SQL ステートメントを見つけるにはどうすればよいでしょうか?これは、多くの人を...