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
Inhaltsverzeichnis Implementieren von HTML CSS hi...
1. px px ist die Abkürzung für Pixel, eine relati...
In diesem Artikel wird der spezifische Code zum I...
Installation der MySQL-Dekomprimierungsversion un...
Der Spread-Operator ermöglicht die Erweiterung ei...
In diesem Artikel wird der spezifische Code von j...
HTML-Semantik scheint ein alltägliches Problem zu...
HTML implementiert ein 2-spaltiges Layout mit fes...
Inhaltsverzeichnis 1. Was ist Docker Compose? 2. ...
1. Vektorkarte Vektorgrafiken verwenden gerade Li...
Ich möchte den Titel links und das Datum rechts a...
Inhaltsverzeichnis Umfeld: 1. Docker ermöglicht d...
Inhaltsverzeichnis Erklärung des V-Texts bei „if“...
Ja, gespeicherte MySQL-Prozeduren scheinen sehr s...
Verwenden Sie den folgenden Befehl, um einen Cont...