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

Eine kurze Einführung in den allgemeinen Prozess der Web-Frontend-Webentwicklung

Ich sehe viele Anfänger in der Front-End-Entwicklu...

Zusammenfassung der MySQL-Entwicklungsstandards und -Nutzungskenntnisse

1. Namenskonventionen 1. Datenbanknamen, Tabellen...

Anwendung von HTML und CSS in Flash

Anwendung von HTML und CSS in Flash: Ich habe zufä...

So binden Sie einen Domänennamen an den Nginx-Dienst

Konfigurieren Sie mehrere Server in nginx.conf: B...

Analyse des MySQL-Client-Installationsprozesses auf dem Mac

Versuchen Sie die Installation über Pip in einer ...

Detaillierte Erklärung der MySQL-Binlog-Verwendung

binlog ist eine binäre Protokolldatei, die alle D...

Der Button ist im IE auf beiden Seiten gestreckt

Wenn Sie Schaltflächen (Eingabe, Schaltfläche) sch...

VMware12 installiert die Desktopversion von Ubuntu19.04 (Installations-Tutorial)

1. Versuchsbeschreibung Installieren Sie in der v...

Optimierte Aufzeichnung der Verwendung von IN-Datenvolumen in Mysql

Die MySQL-Versionsnummer ist 5.7.28. Tabelle A ha...

Detaillierte Erklärung der MySQL InnoDB-Indexerweiterung

Indexerweiterung: InnoDB erweitert automatisch je...