この記事では、Angular の NgTemplateOutlet ディレクティブについて説明し、構造ディレクティブ NgTemplateOutlet の理解と応用について紹介します。
最近、トレーニング プロジェクトを見ていたときに、この NgTemplateOutlet
構造ディレクティブを目にしましたが、これまで一度も目にしたことはありませんでした。それについては知っていますが、どうやって使用するのでしょうか? 次に、公式 Web サイトにアクセスしてこの API を検索しました (公式 Web サイトのリンクはここをクリック)。
しかし、API の説明がわかりません。いわゆるコンテキスト オブジェクトが何なのかもわかりませんし、let 変数が何なのかもわかりません。それから丸一日ドキュメントをめくってメモを取った後、ついにこれが何であるかを理解しました。まだ理解していない友人は、私の前回の記事を参照してください: [Angular Learning] テンプレート入力変数について (let-変数) 理解
この記事では、NgTemplateOutlet
の使用法と使用シナリオについてのみ説明します。 [関連チュートリアルの推奨事項: "angular チュートリアル"]
使い方
公式 Web サイトによると、この API は次のとおりです:
準備された
TemplateRef
に基づいてインライン ビューを挿入します。
私が 翻訳します: NgTemplateOutlet
のホスト要素をインライン ビューにします - このインライン ビューは、事前定義された ## に基づいています。 #templateRef テンプレート参照が生成されます。ホスト要素がどのような要素であっても、レンダリングされません。
@Component({ selector: 'ng-template-outlet-example', template: ` <ng-container *ngTemplateOutlet="one"></ng-container> <hr> <ng-container *ngTemplateOutlet="two; context: myContext"></ng-container> <hr> <ng-container *ngTemplateOutlet="three; context: myContext"></ng-container> <hr> <ng-template #one><span>Hello</span></ng-template> <ng-template #two let-name><span>Hello {{name}}!</span></ng-template> <ng-template #three let-person="lastName">My name is <span>LeBron {{person}}!</span></ng-template> ` }) export class NgTemplateOutletExample { myContext = {$implicit: 'World', lastName: 'James'}; }A host element can use the
ngTemplateOutlet 構造ディレクティブを使用して、次のようにします。それ自体は、任意の
テンプレートによって生成されたインライン ビューになります。そして、
context object をそれに設定できます。次に、このテンプレートで let-variable テンプレート入力変数を使用して、コンテキスト オブジェクトの値を取得できます。このテンプレートはより柔軟です。
アプリケーション シナリオ
ng-zorroと同様このフレームワークのページング コンポーネントPagination(
公式ウェブサイトリンク# ##)。デフォルトの前のページと次のページのスタイルや構造に満足できず、自分で調整したい場合は、入力属性 (@Input で定義された属性) を提供してテンプレートを受け取り、それに必要なプロパティを提供することができます。方法。この場合、コンポーネントのソース コードを変更せずにコンポーネントを再利用できます。
最初にサブコンポーネント
HeroDisplayCard、キャラクターの表示インターフェイス <pre class='brush:php;toolbar:false;'>@Component({
selector:&#39;app-hero-display-card&#39;,
template:`
<h2 id="角色列表">角色列表</h2>
<ul class="hero-card-box">
<li class="hero-card-item" *ngFor="let h of heroesList">
<p [style]="{textAlign:&#39;center&#39;}">
角色id:{{h.id}}--
角色名字:{{h.name}}--
角色属性:{{h.features}}
</p>
</li>
</ul>
`,
styles:[
`.hero-card-box{
width: 600px;
margin: 10px auto;
}
.hero-card-item{
list-style: none;
}
`
]
})
export class HeroDisplayCard {
public heroesList = [
{id:&#39;013&#39;,name:&#39;钟离&#39;,features:&#39;rock&#39;},
{id:&#39;061&#39;,name:&#39;烟绯&#39;,features:&#39;fire&#39;},
{id:&#39;022&#39;,name:&#39;迪奥娜&#39;,features:&#39;ice&#39;},
{id:&#39;004&#39;,name:&#39;诺艾尔&#39;,features:&#39;rock&#39;},
]
}</pre>
を定義してから、このコンポーネントを導入します。親コンポーネント内:
@Component({ selector:'app-templateoutlet-app-demo', template:` <app-hero-display-card></app-hero-display-card> ` }) export class TemplateOutletAppDemoComponent {}
コードを実行すると、次のような効果が得られます:
## この li## のスタイルだと思います。 # は本当に醜いし、順序も正しくありません。キャラクター名の前にキャラクターの属性を入れたい。この場合、単純に属性を入力してスタイルを変更するのは非常に面倒で、ユーザーが選択できるように多くの変数を定義する必要があり、それが利点を少し上回る可能性があります。では、必要なデータのみを提供すればよいので、テンプレートをユーザーに直接提供しないのはなぜでしょうか。スタイルとレイアウトの自由はユーザーに任されています。
したがって、サブコンポーネント HeroDisplayCard
については、次のように変更できます:
@Component({ selector:'app-hero-display-card', template:` <h2 id="角色列表">角色列表</h2> <ul class="hero-card-box"> <ng-container *ngFor="let h of heroesList"> <!-- 如果没有传入cardItemTemplate则显示默认 --> <li class="hero-card-item" *ngIf="!cardItemTemplate"> <p [style]="{textAlign:'center'}"> 角色id:{{h.id}}-- 角色名字:{{h.name}}-- 角色属性:{{h.features}} </p> </li> <!-- 如果传入了自定义模板,则显示出来,鉴于angular的结构型指令不能在同一个宿主元素上的规定,于是这样写 --> <ng-container *ngIf="cardItemTemplate"> <!-- 将自定义模板的上下文对象设置为h --> <ng-container *ngTemplateOutlet="cardItemTemplate;context:h"></ng-container> </ng-container> </ng-container> </ul> `, styles:[ //省略 ] }) export class HeroDisplayCard { @Input() cardItemTemplate:TemplateRef<any>; public heroesList = [ // 省略] }
次に、カスタム テンプレートを親コンポーネントに渡します: <pre class='brush:php;toolbar:false;'>@Component({
selector:&#39;app-templateoutlet-app-demo&#39;,
template:`
<app-hero-display-card [cardItemTemplate]="myCardTemplate"></app-hero-display-card>
<!-- 将模板引用变量myCardTemplate传入子组件 -->
<ng-template #myCardTemplate let-id="id" let-name="name" let-features="features">
<li class="hero-card-custom-item">
<p>角色id:<span>{{id}}</span></p>
<p>角色属性:<span>{{features}}</span></p>
<p>角色名字:<span>{{name}}</span></p>
</li>
</ng-template>
`,
styles:[
//在这里写自定义模板的样式
`.hero-card-custom-item{
width: 100%;
height: 35px;
border: 1px solid #999999;
border-radius: 5px;
display: flex;
justify-content:space-around;
align-items: center;
margin: 10px 0;
}
.hero-card-custom-item p {
width: 30%;
margin: 0;
font-size: 20px;
color: #666666;
}
.hero-card-custom-item p span {
color: red;
}`
]
})
export class TemplateOutletAppDemoComponent {}</pre>
そしてそれを実行すると、効果は以下のようになります (実際にはまだ非常に醜いです):
NgTemplateOutletこの構造ディレクティブは、サブコンポーネントのカプセル化を強化し、親コンポーネントのテンプレートが肥大化して見える多数の入力属性を定義する必要性を回避します。
プログラミング関連の知識について詳しくは、プログラミング入門をご覧ください。 !
以上がAngular での NgTemplateOutlet ディレクティブの理解と使用法について話しましょうの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

はい、JavaScriptのエンジンコアはCで記述されています。1)C言語は、JavaScriptエンジンの開発に適した効率的なパフォーマンスと基礎となる制御を提供します。 2)V8エンジンを例にとると、そのコアはCで記述され、Cの効率とオブジェクト指向の特性を組み合わせて書かれています。3)JavaScriptエンジンの作業原理には、解析、コンパイル、実行が含まれ、C言語はこれらのプロセスで重要な役割を果たします。

JavaScriptは、Webページのインタラクティブ性とダイナミズムを向上させるため、現代のWebサイトの中心にあります。 1)ページを更新せずにコンテンツを変更できます。2)Domapiを介してWebページを操作する、3)アニメーションやドラッグアンドドロップなどの複雑なインタラクティブ効果、4)ユーザーエクスペリエンスを改善するためのパフォーマンスとベストプラクティスを最適化します。

CおよびJavaScriptは、WebAssemblyを介して相互運用性を実現します。 1)CコードはWebAssemblyモジュールにコンパイルされ、JavaScript環境に導入され、コンピューティングパワーが強化されます。 2)ゲーム開発では、Cは物理エンジンとグラフィックスレンダリングを処理し、JavaScriptはゲームロジックとユーザーインターフェイスを担当します。

JavaScriptは、Webサイト、モバイルアプリケーション、デスクトップアプリケーション、サーバー側のプログラミングで広く使用されています。 1)Webサイト開発では、JavaScriptはHTMLおよびCSSと一緒にDOMを運用して、JQueryやReactなどのフレームワークをサポートします。 2)ReactNativeおよびIonicを通じて、JavaScriptはクロスプラットフォームモバイルアプリケーションを開発するために使用されます。 3)電子フレームワークにより、JavaScriptはデスクトップアプリケーションを構築できます。 4)node.jsを使用すると、JavaScriptがサーバー側で実行され、高い並行リクエストをサポートします。

Pythonはデータサイエンスと自動化により適していますが、JavaScriptはフロントエンドとフルスタックの開発により適しています。 1. Pythonは、データ処理とモデリングのためにNumpyやPandasなどのライブラリを使用して、データサイエンスと機械学習でうまく機能します。 2。Pythonは、自動化とスクリプトにおいて簡潔で効率的です。 3. JavaScriptはフロントエンド開発に不可欠であり、動的なWebページと単一ページアプリケーションの構築に使用されます。 4. JavaScriptは、node.jsを通じてバックエンド開発において役割を果たし、フルスタック開発をサポートします。

CとCは、主に通訳者とJITコンパイラを実装するために使用されるJavaScriptエンジンで重要な役割を果たします。 1)cは、JavaScriptソースコードを解析し、抽象的な構文ツリーを生成するために使用されます。 2)Cは、Bytecodeの生成と実行を担当します。 3)Cは、JITコンパイラを実装し、実行時にホットスポットコードを最適化およびコンパイルし、JavaScriptの実行効率を大幅に改善します。

現実世界でのJavaScriptのアプリケーションには、フロントエンドとバックエンドの開発が含まれます。 1)DOM操作とイベント処理を含むTODOリストアプリケーションを構築して、フロントエンドアプリケーションを表示します。 2)node.jsを介してRestfulapiを構築し、バックエンドアプリケーションをデモンストレーションします。

Web開発におけるJavaScriptの主な用途には、クライアントの相互作用、フォーム検証、非同期通信が含まれます。 1)DOM操作による動的なコンテンツの更新とユーザーインタラクション。 2)ユーザーエクスペリエンスを改善するためにデータを提出する前に、クライアントの検証が実行されます。 3)サーバーとのリフレッシュレス通信は、AJAXテクノロジーを通じて達成されます。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

ホットトピック









