角度コア要素[ng]
3998 ワード
Angular コア ライブラリの内部にはいくつかの機能があります.ここでは、ほとんどが混同されており、すべての angular 開発者によって使用されている 3 つのテンプレートを見ていきます.
ng-コンテナ ng-コンテンツ ng-テンプレート
HTML テンプレートを作成せずにディレクティブのみを保持します.このタグに条件式を適用してテンプレートを挿入すると、指定された条件に関してテンプレートが読み込まれます.これは、単一の要素に複数の条件を適用する必要がある場合に役立ちます.
以下は、条件式を適用する方法の基本的な例です.
その中のテンプレートは、コンテナにアタッチしない限り読み込まれません.ディレクティブに追加すれば、必要な数の条件を適用できます.これらは
テンプレートの参照を
テンプレートに構造ディレクティブを適用することもできます.以下の例で理解できます.
上記の例では、条件によってテンプレートのレンダリングがどのように変化するかを確認できます.
簡単に言えば、iframe の代わりと言えます.ディレクティブを作成すると、その特定のディレクティブ セレクター タグ内のコンテンツがディレクティブに読み込まれ、select という属性に割り当てることで、テンプレート内のコンテンツを投影する場所を指定できます.
その名前に DOM 要素を作成しません.
以下の例でさらに理解できます.
ディレクティブで ng-content を定義する一般的な方法.
属性が一致する場合、コンテンツは指定された位置にロードされます.
属性が一致しない場合、デフォルトの位置にロードされます.
2 番目のケースでは、testProjection を持つ p タグも最初に書き込まれます.これは、デフォルトの ng-content の後に testProjection を持つ ng-content select 属性がロードされるため、2 番目の p タグの後にロードされます.
明確になり、3 つの要素すべての違いを理解していただければ幸いです.
幸せなコーディング.....
ng-コンテナ
HTML テンプレートを作成せずにディレクティブのみを保持します.このタグに条件式を適用してテンプレートを挿入すると、指定された条件に関してテンプレートが読み込まれます.これは、単一の要素に複数の条件を適用する必要がある場合に役立ちます.
以下は、条件式を適用する方法の基本的な例です.
---------what you right-------------------
<ng-container *ngIf="isIronMan">
<h1>Tony Stark</h1>
<p>.......</p>
</ng-container>
--------what it loads in DOM---------------
<h1>Tony Stark</h1>
<p>.......</p>
ng-テンプレート
その中のテンプレートは、コンテナにアタッチしない限り読み込まれません.ディレクティブに追加すれば、必要な数の条件を適用できます.これらは
TemplateRef
クラスのインスタンスです.テンプレートの参照を
ViewContainerRef
クラス createEmbededView
メソッドに渡す必要があります.これにより、テンプレートがコンテナにロードされます.開発者は、いつどのように表示するかを完全に制御できます.テンプレートに構造ディレクティブを適用することもできます.以下の例で理解できます.
<ng-template [ngIf]="isAdmin" [ngIfElse]="loading">
<h1>Admin</h1>
</ng-template>
<ng-template #loading>
<h1>Loading....</h1>
<ng-template>
上記の例では、条件によってテンプレートのレンダリングがどのように変化するかを確認できます.
ngIf
は、isAdmin
が true か false かをチェックします. true の場合、最初のテンプレートをロードします.そうでない場合は、ロード名で参照されるテンプレートをロードします.ng-コンテンツ
簡単に言えば、iframe の代わりと言えます.ディレクティブを作成すると、その特定のディレクティブ セレクター タグ内のコンテンツがディレクティブに読み込まれ、select という属性に割り当てることで、テンプレート内のコンテンツを投影する場所を指定できます.
その名前に DOM 要素を作成しません.
以下の例でさらに理解できます.
ディレクティブで ng-content を定義する一般的な方法.
----------------Directive--------------
import { Component } from '@angular/core';
@Component({
selector: 'app-test',
template: `
<h1>Test content</h1>
<ng-content></ng-content>
`
})
export class TestComponent {}
----------------Another Component--------
<app-test>
<p>From another component</p>
</app-test>
-----------------Output--------------
<h1>Test content</h1>
<p>From another component</p>
import { Component } from '@angular/core';
@Component({
selector: 'app-test',
template: `
<h1>Test content</h1>
<ng-content></ng-content>
<ng-content select="[testProjection]"></ng-content>
`
})
export class TestComponent {}
----------------Another Component--------
<app-test>
<p testProjection>From another component</p>
</app-test>
-----------------Output--------------
<h1>Test content</h1>
<p>From another component</p>
import { Component } from '@angular/core';
@Component({
selector: 'app-test',
template: `
<h1>Test content</h1>
<ng-content></ng-content>
<ng-content select="[testProjection]"></ng-content>
`
})
export class TestComponent {}
----------------Another Component--------
<app-test>
<p testProjection>From Example 1 another component</p>
<p>From Example 2 another component</p>
</app-test>
-----------------Output--------------
<h1>Test content</h1>
<p>From Example 2 another component</p>
<p>From Example 1 another component</p>
2 番目のケースでは、testProjection を持つ p タグも最初に書き込まれます.これは、デフォルトの ng-content の後に testProjection を持つ ng-content select 属性がロードされるため、2 番目の p タグの後にロードされます.
明確になり、3 つの要素すべての違いを理解していただければ幸いです.
幸せなコーディング.....
Reference
この問題について(角度コア要素[ng]), 我々は、より多くの情報をここで見つけました https://dev.to/revanth_oleti/angular-core-templates-jafテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol