Maison > interface Web > js tutoriel > Instance de méthode de modèle ngForOf d'entrée de composant angulaire

Instance de méthode de modèle ngForOf d'entrée de composant angulaire

小云云
Libérer: 2018-03-06 09:42:41
original
1167 Les gens l'ont consulté

Maintenant, nous écrivons un composant puppiesListCmp pour afficher une liste de chiots : cet article présente principalement comment Angular utilise la projection de contenu pour saisir le modèle ngForOf dans le composant. J'espère que cela pourra vous aider.


//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
}
Copier après la connexion

Ensuite, utilisez-le comme ceci :


//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"
  }
 ]
}
Copier après la connexion

L'effet sera comme ceci :

Cependant, j'espère que notre composant puppiesListCmp pourra répondre à différents besoins, comme afficher uniquement le nom et la couleur du chiot tandis que les données restent inchangées, comme ceci :

C'est l'objet de cet article. Nous devons implémenter des modèles définis par l'utilisateur !

Maintenant, nous ne codons pas en dur le modèle de composant, mais laissons l'utilisateur saisir de l'extérieur !

Tout d'abord, notre modèle de composant :


<p *ngFor="let puppy of puppies">
   <span>{{puppy.name}}</span>
   <span>{{puppy.age}}</span>
   <span>{{puppy.color}}</span>
</p>
Copier après la connexion

est équivalent à :


<ng-template ngFor let-puppy [ngForOf]="puppies">
   <p>
    <span>{{puppy.name}}</span>
    <span>{{puppy.age}}</span>
    <span>{{puppy.color}}</span>
   </p>
</ng-template>
Copier après la connexion

Ensuite, utilisez @ContentChild (à propos de @ContentChild, vous pouvez vérifier ici, FQ est requis) pour obtenir Personnalisez le modèle en externe (par rapport au composant puppiesListCmp) et attribuez-le à ngForTemplate. Autrement dit, cette partie :


<p>
  <span>{{puppy.name}}</span>
  <span>{{puppy.age}}</span>
  <span>{{puppy.color}}</span>
</p>
Copier après la connexion

n'est plus codée en dur dans le composant comme avant, mais est personnalisée par l'utilisateur dans le composant parent, puis Utilisez la projection de contenu d'Angular pour projeter dans le composant puppiesListCmp. Comme ceci :


//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
}
Copier après la connexion

De cette façon, notre composant est complet. Ensuite on l'utilise :


//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>
`
})
Copier après la connexion

L'effet est toujours le même :

Si on juste afficher Écrivez simplement le nom et la couleur du chiot comme ceci :


//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>
`
})
Copier après la connexion

L'effet sera comme ceci :

Ces composants sont très flexibles et peuvent être personnalisés selon l'effet souhaité, réalisant ainsi la réutilisation des composants.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal