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

HTML+CSS+JavaScript zum Erstellen eines einfachen Tic-Tac-Toe-Spiels

Inhaltsverzeichnis Implementieren von HTML CSS hi...

Importieren Sie die CSV-Datei mit Navicat in MySQL

In diesem Artikel wird der spezifische Code zum I...

Beispielcode des Spread-Operators und seiner Anwendung in JavaScript

Der Spread-Operator ermöglicht die Erweiterung ei...

js, um die Rotation von Webseitenbildern zu realisieren

In diesem Artikel wird der spezifische Code von j...

HTML-Tipps, um Ihren Code semantisch zu gestalten

HTML-Semantik scheint ein alltägliches Problem zu...

Installations- und Verwendungsschritte für Docker Compose

Inhaltsverzeichnis 1. Was ist Docker Compose? 2. ...

Lösen Sie das Problem beim Laden der Vektorkartenquelle in OpenLayers 3

1. Vektorkarte Vektorgrafiken verwenden gerade Li...

Beispiele für die Verwendung des Li-Tags in HTML

Ich möchte den Titel links und das Datum rechts a...

Analysieren der häufig verwendeten v-Anweisungen in vue.js

Inhaltsverzeichnis Erklärung des V-Texts bei „if“...

Zusammenfassung der Berechtigungsprobleme bei gespeicherten MySQL-Prozeduren

Ja, gespeicherte MySQL-Prozeduren scheinen sehr s...