ここで、子犬のリストを表示するコンポーネント puppiesListCmp を作成します。この記事では主に、Angular がコンテンツ プロジェクションを使用して ngForOf テンプレートをコンポーネントに入力する方法を紹介します。お役に立てば幸いです。
//puppies-list.component.ts @Component({ selector: 'puppies-list', template: ` <p *ngFor="let puppy of puppies"> <span>{{puppy.name}}</span> <span>{{puppy.age}}</span> <span>{{puppy.color}}</span> </p> ` }) export class puppiesListCmp{ @Input() puppies: Puppy[]; } interface Puppy { name: string, age: number, color: string }
次に、次のように使用します:
//app.component.ts @Component({ selector: 'my-app', template: ` <puppies-list [puppies]="puppies"></puppies-list> ` }) export class App{ puppies = [ { name: "sam", age: 0.6, color: "yellow" }, { name: "bingo", age: 1.5, color: "black" } ] }
効果は次のようになります:
ただし、puppiesListCmp コンポーネントが、次の場合にのみ表示するなど、さまざまなニーズを満たすことができることを願っています。データは変更されません 子犬の名前と色は次のとおりです:
これがこの記事の焦点です。ユーザー定義のテンプレートを実装する必要があります。
今度はコンポーネント テンプレートをハードコーディングせず、ユーザーが外部から入力できるようにします。
まず、コンポーネント テンプレート:
<p *ngFor="let puppy of puppies"> <span>{{puppy.name}}</span> <span>{{puppy.age}}</span> <span>{{puppy.color}}</span> </p>
は次と同等です:
<ng-template ngFor let-puppy [ngForOf]="puppies"> <p> <span>{{puppy.name}}</span> <span>{{puppy.age}}</span> <span>{{puppy.color}}</span> </p> </ng-template>
、@ContentChild (@ContentChild については、ここで確認できます。FQ が必要です) を使用して、外部 (puppiesListCmp コンポーネントに関連する) カスタム テンプレートを取得し、それを ngForTemplate に割り当てます。つまり、この部分:
<p> <span>{{puppy.name}}</span> <span>{{puppy.age}}</span> <span>{{puppy.color}}</span> </p>
は、以前のようにコンポーネント内でハードコーディングされなくなりましたが、親コンポーネント内でユーザーによってカスタマイズされ、Angular のコンテンツ プロジェクション (コンテンツ プロジェクション) を使用してそれを投影します。 puppiesListCmp コンポーネント内。次のようになります:
//puppies-list.component.ts import { Component, Input, ContentChild, TemplateRef } from '@angular/core'; import { NgForOfContext } from '@angular/common'; @Component({ selector: 'puppies-list', template: ` <ng-template ngFor let-puppy [ngForOf]="puppies" [ngForTemplate]="tpl"></ng-template> ` }) export class puppiesListCmp{ @Input() puppies: Puppy[]; @ContentChild(TemplateRef) tpl: TemplateRef<NgForOfContext<Puppy>> } interface Puppy { name: string, age: number, color: string }
このようにして、コンポーネントが完成しました。次に、それを使用します:
//app.component.ts @Component({ selector: 'my-app', template: ` <puppies-list [puppies]="puppies"> <ng-template let-puppy> <p> <span>{{puppy.name}}</span> <span>{{puppy.age}}</span> <span>{{puppy.color}}</span> </p> </ng-template> </puppies-list> ` })
効果は同じです:
子犬の名前と色のみを表示する必要がある場合は、次のように書くだけです:
//app.component.ts @Component({ selector: 'my-app', template: ` <puppies-list [puppies]="puppies"> <ng-template let-puppy> <p> <span>{{puppy.name}}</span> <span>{{puppy.color}}</span> </p> </ng-template> </puppies-list> ` })
エフェクトは次のようになります:
このようなコンポーネントは非常に柔軟で、必要なエフェクトにカスタマイズできるため、コンポーネントの再利用が実現します。
以上がAngular コンポーネント入力 ngForOf テンプレート メソッド インスタンスの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。