Einzelne InhaltsprojektionVerwenden von ng-content zur Implementierung <!-- Komponente- App-Inhalt-Einzel --> <div> <h2>Titel</h2> <!-- Anzeigeposition des Projektionsinhalts--> <ng-Inhalt></ng-Inhalt> </div> <!-- Verwendung --> <App-Inhalt-Einzel> <div>das ist Inhalt</div> </app-content-single> Multi-Content-Projektion Verwenden <!-- Komponente- App-Inhalt-mehr --> <div> <h3>Hirtentitel</h3> <ng-Inhalt auswählen=".header"></ng-Inhalt> <h3>Titel des Hauptteils</h3> <ng-Inhalt auswählen="[body]"></ng-Inhalt> <h3>Standardtitel</h3> <ng-Inhalt></ng-Inhalt> <h3>Fußzeilentitel</h3> <ng-Inhalt auswählen="Fußzeile"></ng-Inhalt> </div> <!-- Verwendung --> <App-Inhalt-mehr> <div>Dies ist Standard01</div> <div class="header">das ist die Kopfzeile</div> <div>Dies ist default02</div> <div body>das ist der Text</div> <div>Dies ist Standard03</div> <footer>das ist die Fußzeile</footer> <div>Dies ist default04</div> </app-content-more> Bedingte Inhaltsprojektion - Inhaltsprojektion für eine einzelne BedingungBeispiel: Angenommen, es gibt jetzt eine Liste von Personen. Wenn das Geld einer Person größer als 200 ist, wird der in der Vorlage definierte Inhalt in der Komponente hinzugefügt Definieren Sie eine appChildRef-Direktive, um mit ng-template zusammenzuarbeiten und die Vorlage zu erhalten importiere { Direktive, TemplateRef } von '@angular/core'; @Richtlinie({ Selektor: '[appChildRef]' }) Exportklasse ChildRefDirective { Konstruktor(öffentliche TemplateRef: TemplateRef<any>) { } } App-Personen-html<div Klasse = "Listenelement" *ngFor = "Person von Personen lassen;"> <div>Name: {{ person.name }}</div> <div>Geld: {{ person.money }}</div> <div *ngIf="person.geld > 200"> <ng-container *ngIf="childRef" [ngTemplateOutlet]="childRef.templateRef"></ng-container> </div> </div> App-Personen - tsimportiere { Komponente, ContentChild, OnInit } aus '@angular/core'; importiere { ChildRefDirective } aus '../../../../directives/child-ref.directive'; @Komponente({ Selektor: ‚App-Personen‘, Vorlagen-URL: "./persons.component.html", styleUrls: ['./persons.component.scss'] }) export Klasse PersonsComponent implementiert OnInit { Personen: { Name: Zeichenfolge; Geld: Zahl; }[] = [ { Name: 'Jack', Geld: 120 }, { Name: 'Li Li', Geld: 210 }, { Name: 'Zhang San', Geld: 170 }, ]; @ContentChild(ChildRefDirective, { static: true }) childRef!: ChildRefDirective; Konstruktor() { } ngOnInit(): void { } } verwenden<App-Personen> <ng-Vorlage appChildRef> <div style="font-size: 14px; color: red;">Dies ist untergeordneter Referenzinhalt</div> </ng-Vorlage> </app-persons> RendernMehrfache bedingte InhaltsprojektionBeispiel: Jetzt wollen wir die eingebettete Vorlage so binden, dass sie über die Felder in den Personendaten angezeigt wird appChildRef-Anpassungimportiere { Direktive, Eingabe, TemplateRef } von '@angular/core'; @Richtlinie({ Selektor: '[appChildRef]' }) Exportklasse ChildRefDirective { // Den definierten Vorlagennamen akzeptieren - den entsprechenden Vorlageninhalt über diesen Namen und das Renderfeld in Personen anzeigen @Input() appChildRef!: string; Konstruktor(öffentliche TemplateRef: TemplateRef<any>) { } } App-Personen-html<div Klasse = "Listenelement" *ngFor = "let Person von Personen;let i = Index;"> <div>Name: {{ person.name }}</div> <div>Geld: {{ person.money }}</div> <!-- <div *ngIf="person.geld > 200"> <ng-container *ngIf="childRef" [ngTemplateOutlet]="childRef.templateRef"></ng-container> </div> --> <div *ngIf="person.render && tempRefs[person.render]"> <!-- Verwenden Sie die ngTemplateOutlet-Direktive, um die aktuellen Personendaten an die Vorlage zu übergeben --> <ng-container *ngTemplateOutlet="tempRefs[person.render].templateRef; Kontext: { $implicit: person, i: i }"></ng-container> </div> </div> App-Personen - TSimportiere { Komponente, untergeordnetes Inhaltselement, untergeordnete Inhaltselemente, OnInit, QueryList } aus '@angular/core'; importiere { ChildRefDirective } aus '../../../../directives/child-ref.directive'; @Komponente({ Selektor: ‚App-Formular-Einheit‘, Vorlagen-URL: "./form-unit.component.html", styleUrls: ['./form-unit.component.scss'] }) Exportklasse FormUnitComponent implementiert OnInit { Personen: { Name: Zeichenfolge; Geld: Zahl; Rendern?: Zeichenfolge; }[] = [ { Name: 'Jack', Geld: 120, Render: 'temp1' }, { Name: 'Schrift', Geld: 210, Render: 'temp2' }, { Name: 'Während', Geld: 170, Render: 'temp3' }, ]; // @ContentChild(ChildRefDirective, { static: true }) childRef!: ChildRefDirective; @ContentChildren(ChildRefDirective) childrenRef!: Abfrageliste<ChildRefDirective>; Holen Sie sich tempRefs() { const aObj: beliebig = {}; dies.childrenRef.forEach(Vorlage => { Konstant-Schlüssel: Zeichenfolge = Vorlage.appChildRef; aObj[Schlüssel] = Vorlage; }) gib ein Objekt zurück; } Konstruktor() { } ngOnInit(): void { } } verwenden<App-Personen> <ng-template appChildRef="temp1" let-person let-index="i"> <div style="font-size: 14px; color: red;">{{index}}-{{person.name}}: dies ist temp1</div> </ng-Vorlage> <ng-template appChildRef="temp2" let-person let-index="i"> <div style="font-size: 14px; color: green;">{{index}}-{{person.name}}: dies ist temp2</div> </ng-Vorlage> <ng-template appChildRef="temp3" let-person let-index="i"> <div style="font-size: 14px; color: orange;">{{index}}-{{person.name}}: dies ist temp3</div> </ng-Vorlage> </app-persons> Rendern ZusammenfassenDieser Artikel endet hier. Ich hoffe, er kann Ihnen helfen. Ich hoffe auch, dass Sie mehr Inhalt auf 123WORDPRESS.COM lesen können! Das könnte Sie auch interessieren:
|
<<: So verkleinern Sie das Stammverzeichnis des XFS-Partitionsformats in Linux
>>: SQL-Aggregation, Gruppierung und Sortierung
Ich sehe viele Anfänger in der Front-End-Entwicklu...
1. Namenskonventionen 1. Datenbanknamen, Tabellen...
Anwendung von HTML und CSS in Flash: Ich habe zufä...
Prämisse In komplexen Szenarien müssen große Date...
Konfigurieren Sie mehrere Server in nginx.conf: B...
Versuchen Sie die Installation über Pip in einer ...
Inhaltsverzeichnis 1. Filtern, Zuordnen und Reduz...
binlog ist eine binäre Protokolldatei, die alle D...
Wenn Sie Schaltflächen (Eingabe, Schaltfläche) sch...
Vorwort Ich hatte kürzlich ein Problem bei der Ar...
Es handelt sich dabei ausschließlich um Webseiten...
1. Versuchsbeschreibung Installieren Sie in der v...
Die MySQL-Versionsnummer ist 5.7.28. Tabelle A ha...
Indexerweiterung: InnoDB erweitert automatisch je...
Fragen zu Select-Elementen in HTML wurden an viel...