Heim > Web-Frontend > js-Tutorial > Angular Component Input ngForOf-Vorlagenmethodeninstanz

Angular Component Input ngForOf-Vorlagenmethodeninstanz

小云云
Freigeben: 2018-03-06 09:42:41
Original
1168 Leute haben es durchsucht

Jetzt schreiben wir eine Komponente puppiesListCmp, um eine Liste von Welpen anzuzeigen: In diesem Artikel wird hauptsächlich vorgestellt, wie Angular die Inhaltsprojektion verwendet, um die ngForOf-Vorlage in die Komponente einzugeben.


//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
}
Nach dem Login kopieren

Dann verwenden Sie es so:


//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"
  }
 ]
}
Nach dem Login kopieren

Der Effekt wird so sein:

Ich hoffe jedoch, dass unsere puppiesListCmp-Komponente unterschiedliche Anforderungen erfüllen kann, z. B. nur die Anzeige des Namens und der Farbe des Welpen, während die Daten unverändert bleiben, wie folgt:

Das ist der Schwerpunkt dieses Artikels. Wir müssen benutzerdefinierte Vorlagen implementieren!

Jetzt codieren wir die Komponentenvorlage nicht mehr fest, sondern lassen den Benutzer Eingaben von außen machen!

Zuerst unsere Komponentenvorlage:


<p *ngFor="let puppy of puppies">
   <span>{{puppy.name}}</span>
   <span>{{puppy.age}}</span>
   <span>{{puppy.color}}</span>
</p>
Nach dem Login kopieren

ist äquivalent zu:


<ng-template ngFor let-puppy [ngForOf]="puppies">
   <p>
    <span>{{puppy.name}}</span>
    <span>{{puppy.age}}</span>
    <span>{{puppy.color}}</span>
   </p>
</ng-template>
Nach dem Login kopieren

Dann verwenden Sie @ContentChild (über @ContentChild können Sie hier nachsehen, FQ ist erforderlich), um die Vorlage extern anzupassen (relativ zur puppiesListCmp-Komponente) und sie ngForTemplate zuzuweisen. Mit anderen Worten, dieser Teil:


<p>
  <span>{{puppy.name}}</span>
  <span>{{puppy.age}}</span>
  <span>{{puppy.color}}</span>
</p>
Nach dem Login kopieren

ist nicht mehr wie zuvor in der Komponente fest codiert, sondern wird vom Benutzer in der übergeordneten Komponente angepasst und dann Verwenden Sie die Inhaltsprojektion von Angular, um in die puppiesListCmp-Komponente zu projizieren. So:


//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
}
Nach dem Login kopieren

Damit ist unsere Komponente komplett. Dann verwenden wir es:


//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>
`
})
Nach dem Login kopieren

Der Effekt ist immer noch derselbe:

Wenn wir einfach anzeigen Schreiben Sie einfach den Namen und die Farbe des Welpen wie folgt:


//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>
`
})
Nach dem Login kopieren

Der Effekt wird so sein:

Solche Komponenten sind sehr flexibel und können je nach gewünschtem Effekt angepasst werden, wodurch die Wiederverwendung von Komponenten realisiert wird.

Das obige ist der detaillierte Inhalt vonAngular Component Input ngForOf-Vorlagenmethodeninstanz. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage