ホームページ  >  記事  >  ウェブフロントエンド  >  Angular コンポーネント入力 ngForOf テンプレート メソッド インスタンス

Angular コンポーネント入力 ngForOf テンプレート メソッド インスタンス

小云云
小云云オリジナル
2018-03-06 09:42:411073ブラウズ

ここで、子犬のリストを表示するコンポーネント 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: &#39;my-app&#39;,
 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 &#39;@angular/core&#39;;
import { NgForOfContext } from &#39;@angular/common&#39;;
@Component({
 selector: &#39;puppies-list&#39;,
 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: &#39;my-app&#39;,
 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: &#39;my-app&#39;,
 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。