ホームページ  >  記事  >  ウェブフロントエンド  >  Angular によるコンテンツ プロジェクションを使用して ngForOf テンプレートをコンポーネントに入力する手順は何ですか?

Angular によるコンテンツ プロジェクションを使用して ngForOf テンプレートをコンポーネントに入力する手順は何ですか?

亚连
亚连オリジナル
2018-06-01 11:54:411701ブラウズ

この記事では、Angular がコンテンツ プロジェクションを使用して ngForOf テンプレートをコンポーネントに入力する方法を主に紹介し、参考として紹介します。

ここで、子犬のリストを表示するコンポーネント puppiesListCmp を作成します:

//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 コンポーネント内に Go を投影します。 。次のようになります:

//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>
`
})

エフェクトは次のようになります:

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

上記は私が皆さんのためにまとめたもので、将来的に皆さんのお役に立てれば幸いです。

関連記事: uAngularjs Promise 例解説


Excel をエクスポートする 5 つのメソッドを詳しく解説


JavaScript 実装ファイルをローカルメソッドに


以上がAngular によるコンテンツ プロジェクションを使用して ngForOf テンプレートをコンポーネントに入力する手順は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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