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
Die JSON-Daten müssen im HTML-Format zurückgegeben...
Nachfolgend finden Sie den Code zum Erstellen ein...
Das W3C, eine 1994 gegründete Organisation, zielt...
1. Die Verwendung der oder Syntax in MySQL und di...
VC6.0 ist tatsächlich zu alt VC6.0 ist ein Entwic...
Das Löschen einer Tabelle kommt nicht sehr häufig...
Ich stelle hauptsächlich vor, wie man im WeChat-A...
Es gibt wahrscheinlich ebenso viele modulare Lösu...
1. Zwei Eigenschaften des Tabellen-Resets: ①borde...
1. Lösung 1.1 Beschreibung des Schnittstellenkont...
1. CSS verwenden Code kopieren Der Code lautet wie...
Ich bin vor Kurzem auf ein Problem gestoßen, als ...
Dieser Artikel ist MySQL-Datenbank Frage 1 Import...
keine Ahnung nvm ist für die Verwaltung mehrerer ...
Inhaltsverzeichnis Vorwort Requisiten Kontext Zus...