Detaillierte Erklärung der Winkelinhaltsprojektion

Detaillierte Erklärung der Winkelinhaltsprojektion

Einzelne Inhaltsprojektion

Verwenden 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 ng-content zur Implementierung

<!-- 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 - ng-template , ng-container , directive usw. zu erreichen

Inhaltsprojektion für eine einzelne Bedingung

Beispiel: 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 - ts

importiere { 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>

Rendern

Rendern

Mehrfache bedingte Inhaltsprojektion

Beispiel: Jetzt wollen wir die eingebettete Vorlage so binden, dass sie über die Felder in den Personendaten angezeigt wird

appChildRef-Anpassung

importiere { 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 - TS

importiere { 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

Rendern

Zusammenfassen

Dieser 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:
  • Detaillierte Erklärung der Angular-Komponentenprojektion
  • Detaillierte Erläuterung der Implementierung gemeinsam genutzter Module in Angular-Projekten
  • Detaillierte Erläuterung der Angular-Routing-Unterrouten
  • Detaillierte Erläuterung der Angular-Routing-Grundlagen
  • Detaillierte Erklärung des Lebenszyklus von Angular-Komponenten (Teil 2)
  • Detaillierte Erklärung des Lebenszyklus einer Angular-Komponente (I)
  • Detaillierte Erklärung des Middleman-Modus von Angular-Komponenten

<<:  So verkleinern Sie das Stammverzeichnis des XFS-Partitionsformats in Linux

>>:  SQL-Aggregation, Gruppierung und Sortierung

Artikel empfehlen

So erstellen Sie einen SSH-Dienst basierend auf einem Golang-Image in Docker

Nachfolgend finden Sie den Code zum Erstellen ein...

W3C Tutorial (1): W3C verstehen

Das W3C, eine 1994 gegründete Organisation, zielt...

Beispiele für die Verwendung der oder-Anweisung in MySQL

1. Die Verwendung der oder Syntax in MySQL und di...

So implementieren Sie ein Glücksradspiel im WeChat-Applet

Ich stelle hauptsächlich vor, wie man im WeChat-A...

Modulare CSS-Lösung

Es gibt wahrscheinlich ebenso viele modulare Lösu...

Detaillierte Erklärung einiger Einstellungen für Tabellenanpassung und Überlauf

1. Zwei Eigenschaften des Tabellen-Resets: ①borde...

Mehrere Möglichkeiten zum Ausblenden von HTML-Elementen

1. CSS verwenden Code kopieren Der Code lautet wie...

Detaillierte Erklärung von count(), group by, order by in MySQL

Ich bin vor Kurzem auf ein Problem gestoßen, als ...

Detaillierter Installationsprozess des NodeJS-Verwaltungstools NVM

keine Ahnung nvm ist für die Verwaltung mehrerer ...