AngularでngForOfをコンポーネントに入力する方法

php中世界最好的语言
リリース: 2018-03-28 14:13:46
オリジナル
1456 人が閲覧しました

今回は、Angular が ngForOf をコンポーネントに入力する方法を説明します。 Angular が ngForOf をコンポーネントに入力するときの 注意事項 とは何ですか。実際のケースを見てみましょう。

今、子犬のリストを表示するコンポーネント puppies

ListCmp を作成します:

//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"
  }
 ]
}
ログイン後にコピー
効果は次のようになります:

ただし、私は子犬ListCmpが必要ですコンポーネント このように、データが変更されていない場合に子犬の名前と色のみを表示するなど、さまざまなニーズを満たすことができます:

これがこの記事の焦点です。ユーザー定義のテンプレートを実装する必要があります。

今度はコンポーネントのテンプレートをハードコーディングせず、ユーザーが外部から入力できるようにします。

まず、コンポーネント テンプレート:

<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 の場合) を使用します。ここでは、外部 (puppiesListCmp コンポーネントに関連する) カスタム テンプレートを取得し、それを ngForTemplate に割り当てるには FQ が必要です。つまり、この部分:

<p>
  <span>{{puppy.name}}</span>
  <span>{{puppy.age}}</span>
  <span>{{puppy.color}}</span>
</p>
ログイン後にコピー
は以前のようにコンポーネント内でハードコーディングされなくなり、親コンポーネント内でユーザーによってカスタマイズされ、Angular の Content Projection を使用して 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>
`
})
ログイン後にコピー
効果は次のようになります:

このようなコンポーネントは非常に柔軟で、必要な効果をカスタマイズできるため、コンポーネントの再利用が実現します。

この記事の事例を読んだ後は、この方法を習得したと思います。さらに興味深い情報については、php 中国語 Web サイトの他の関連記事に注目してください。

推奨読書:

Baidu の BAE を通じて vue プロジェクトを公開する方法

axios http リクエストが vue2 で使用できない理由

以上がAngularでngForOfをコンポーネントに入力する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート