Inhaltsverzeichnis
" >Die Containerkomponente wird so geschrieben so
使用标签锁定投影位置
Die Container-Komponente ist so geschrieben" >Verwenden Sie ng-container zum Umschließen Unterelemente und reduzieren unnötige Dom-Ebenen, ähnlich der Vorlage in Vue Die Container-Komponente ist so geschrieben
4. 有条件的内容投影" >4. 有条件的内容投影
5. @ContentChild & @ContentChildren" >5. @ContentChild & @ContentChildren
6. @ViewChild & @ViewChildren" >6. @ViewChild & @ViewChildren
4. Bedingte Inhaltsprojektion" >

4. Bedingte Inhaltsprojektion

Heim Web-Frontend js-Tutorial Eine kurze Analyse der Inhaltsprojektion beim Lernen von Angular-Komponenten

Eine kurze Analyse der Inhaltsprojektion beim Lernen von Angular-Komponenten

Aug 09, 2021 am 10:24 AM
angular 组件

Dieser Artikel führt Sie durch die Inhaltsprojektion in Angular-Komponenten. Die Inhaltsprojektion ist dem Slot in Vue sehr ähnlich. Es ist sehr nützlich, wenn wir es gemeinsam erleben.

Eine kurze Analyse der Inhaltsprojektion beim Lernen von Angular-Komponenten

Inhalt

Die Containerkomponente wird so geschrieben
<div>
  编号1
  <ng-content></ng-content>
</div>
Nach dem Login kopieren

Die Geschäftskomponente wird so verwendet

<app-page-container>
	未指定投影位置的内容会被投影到无select属性的区域
</app-page-container>
Nach dem Login kopieren

2. Projizieren Sie mehrere Inhalte/Komponenten

Die Containerkomponente wird so geschrieben so

Sperren Sie die Projektion mit Tags „Position“

    Verwenden Sie eine Klasse, um die Projektionsposition zu sperren
  • Sperren Sie die Projektionsposition mit einem benutzerdefinierten Komponentennamen
  • Verwenden Sie benutzerdefinierte Attribute, um die Projektionsposition zu sperren
  • <div>
      编号2
      <ng-content select="h3"></ng-content>
      <ng-content select=".my-class"></ng-content>
      <ng-content select="app-my-hello"></ng-content>
      <ng-content select="[content]"></ng-content>
    </div>
    Nach dem Login kopieren
  • So werden Geschäftskomponenten verwendet

    <app-page-container>
      <h3 id="使用标签锁定投影位置">使用标签锁定投影位置</h3>
      <div class="my-class">使用class锁定投影位置</div>
      <app-my-hello>使用自定义组件名称锁定投影位置</app-my-hello>
      <div content>使用自定义属性锁定投影位置</div>
    </app-page-container>
    Nach dem Login kopieren
Demo

3. Projektunterelemente

Eine kurze Analyse der Inhaltsprojektion beim Lernen von Angular-Komponenten

Verwenden Sie ng-container zum Umschließen Unterelemente und reduzieren unnötige Dom-Ebenen, ähnlich der Vorlage in Vue Die Container-Komponente ist so geschrieben

<div>
  编号4
  <ng-content select="question"></ng-content>
</div>
Nach dem Login kopieren

ng-container来包裹子元素,减少不必要的dom层,类似vue中的template

容器组件这样写

<app-page-container>
  <ng-container ngProjectAs="question">
    <p>内容投影酷吗?</p>
    <p>内容投影酷吗?</p>
    <p>内容投影酷吗?</p>
    <p>内容投影酷吗?</p>
  </ng-container>
</app-page-container>
Nach dem Login kopieren

业务组件这样写

<div>
  编号3
  <ng-content select="[button]"></ng-content>
  <p *ngIf="expanded">
    <ng-container [ngTemplateOutlet]="content.templateRef"> </ng-container>
  </p>
</div>
Nach dem Login kopieren

4. 有条件的内容投影

中文网的描述:

  • 如果你的组件需要_有条件地_渲染内容或多次渲染内容,则应配置该组件以接受一个 ng-template 元素,其中包含要有条件渲染的内容。

  • 在这种情况下,不建议使用 ng-content 元素,因为只要组件的使用者提供了内容,即使该组件从未定义 ng-content 元素或该 ng-content 元素位于 ngIf 语句的内部,该内容也总会被初始化。

  • 使用 ng-template 元素,你可以让组件根据你想要的任何条件显式渲染内容,并可以进行多次渲染。在显式渲染 ng-template 元素之前,Angular 不会初始化该元素的内容。

使用ng-container定义我们的投影区块

  • 使用ngTemplateOutlet指令来渲染ng-template元素。

  • 通过内置的动态指令*ngIf来控制是否渲染投影。

<app-page-container>
  <div button>
    <button appToggle>切换</button>
  </div>
  <ng-template appContent>
    <app-my-hello>有条件的内容投影~</app-my-hello>
  </ng-template>
</app-page-container>
Nach dem Login kopieren

在业务组件中我们使用ng-template来包裹我们的实际元素。

my-hello组件只在ngOnInit()做日志输出来观察打印情况。

import { Directive, TemplateRef } from &#39;@angular/core&#39;;

@Directive({
  selector: &#39;[appContent]&#39;,
})
export class ContentDirective {
  constructor(public templateRef: TemplateRef<unknown>) {}
}
Nach dem Login kopieren

现在你会发现页面并没有像前面那么顺利的正常渲染,因为我们的逻辑还没有串通,我们继续。创建一个指令,并在NgModule中注册,一定要注册才能用哦~

指令需要注册哦~

@Directive({
  selector: &#39;[appToggle]&#39;,
})
export class ToggleDirective {
  @HostListener(&#39;click&#39;) toggle() {
    this.app.expanded = !this.app.expanded;
  }
  constructor(public app: PageContainerComponent) {}
}
Nach dem Login kopieren

我们再定义一个指令来控制组件中显示/隐藏的标识

指令需要注册哦~

export class PageContainerComponent implements OnInit {

  expanded: boolean = false;

  @ContentChild(ContentDirective)
  content!: ContentDirective;

}
Nach dem Login kopieren

在我们的容器组件中申明刚才定义的内容指令,页面目前不报错咯~

<div *ngIf="false">
  <ng-content *ngIf="false" select="app-my-hello"></ng-content>
</div>
Nach dem Login kopieren

通过日志可以看到我们在切换容器组件的expanded标识时,只有开启状态my-hello组件才会初始化,下面的这个ngIf虽然在页面看不到渲染的内容,但组件实实在在被初始化过了。

@ContentChild(HelloWorldComp)
helloComp: HelloWorldComp;

@ContentChildren(HelloWorldComp)
helloComps: QueryList<HelloWorldComp>;
Nach dem Login kopieren

5. @ContentChild & @ContentChildren

使用这两个装饰器来对被投影的组件进行操作

使用注解在业务组件中定义被投影的组件

@ViewChild(HelloWorldComp)
helloComp: HelloWorldComp;
  
@ViewChildren(HelloWorldComp)
helloComps QueryList<HelloWorldComp>;
Nach dem Login kopieren

ngAfterContentInit()钩子执行后对被投影组件进行操作

6. @ViewChild & @ViewChildren

使用这两个装饰器来对指接子组件进行操作

使用注解在业务组件中定义子组件

rrreee

ngAfterViewInit()Die Geschäftskomponente ist so geschrieben

rrreee

4. Bedingte Inhaltsprojektion

🎜Chinesische Website-Beschreibung:🎜 🎜🎜🎜Wenn Ihre Komponente Inhalte _🎜bedingt 🎜_ rendern oder Inhalte mehrmals rendern muss, sollten Sie die Komponente so konfigurieren, dass sie akzeptiert ein ng-template-Element, das den Inhalt enthält, der bedingt gerendert werden soll. 🎜🎜🎜🎜In diesem Fall wird die Verwendung des ng-content-Elements nicht empfohlen, da der Benutzer der Komponente den Inhalt bereitstellt, auch wenn die Komponente niemals das ng-content-Element definiert oder das ng-content-Element ist befindet sich in ngIf🎜 Innerhalb der Anweisung wird der Inhalt immer initialisiert. 🎜🎜🎜🎜Mit dem ng-template-Element können Sie die Komponente explizit dazu veranlassen, Inhalte basierend auf beliebigen gewünschten Bedingungen zu rendern und mehrmals zu rendern. Angular initialisiert den Inhalt eines ng-template-Elements erst, wenn das Element explizit gerendert wird. 🎜🎜🎜🎜🎜Verwenden Sie ng-container, um unseren Projektionsblock zu definieren. 🎜🎜🎜🎜🎜Verwenden Sie die ngTemplateOutlet-Direktive, um ng-template-Element. 🎜🎜🎜🎜Verwenden Sie die integrierte dynamische Anweisung <code>*ngIf, um zu steuern, ob die Projektion gerendert werden soll. 🎜🎜🎜rrreee🎜🎜In der Geschäftskomponente verwenden wir ng-template, um unsere eigentlichen Elemente zu verpacken. 🎜🎜🎜🎜Die my-hello-Komponente führt nur eine Protokollausgabe in ngOnInit() durch, um die Drucksituation zu beobachten. 🎜rrreee🎜🎜Jetzt werden Sie feststellen, dass die Seite nicht mehr so ​​reibungslos gerendert wird wie zuvor, da unsere Logik noch nicht abgestimmt ist. Fahren wir fort. Erstellen Sie einen Befehl und registrieren Sie ihn in NgModule. Sie müssen sich registrieren, um ihn verwenden zu können 🎜 🎜🎜Der Befehl muss registriert werden~🎜rrreee🎜🎜Deklarieren Sie den gerade in unserer Containerkomponente definierten Inhaltsbefehl. Die Seite meldet derzeit keinen Fehler~🎜🎜rrreee🎜🎜Das können Sie dem Protokoll entnehmen Wir wechseln die Containerkomponente. Wenn expanded markiert ist, wird nur die my-hello-Komponente im geöffneten Zustand initialisiert, obwohl der folgende ngIf Der gerenderte Inhalt auf der Seite kann nicht angezeigt werden, die Komponente wurde jedoch tatsächlich initialisiert. 🎜🎜rrreee

🎜🎜5. @ContentChild & @ContentChildren🎜🎜🎜🎜🎜Verwenden Sie diese beiden Dekoratoren, um die projizierte Komponente zu bearbeiten🎜🎜🎜 Verwenden Sie Anmerkungen zum Definieren die projizierte Komponente in der Geschäftskomponente🎜🎜rrreee🎜🎜die projizierte Komponente bearbeiten, nachdem der Hook ngAfterContentInit() ausgeführt wurde🎜🎜

🎜🎜6. @ViewChild & @ViewChildren🎜🎜🎜🎜🎜Verwenden Sie diese beiden Dekoratoren, um mit Fingerverbindungen verbundene Unterkomponenten zu bearbeiten🎜🎜🎜Verwenden Sie Anmerkungen, um Unterkomponenten in Geschäftskomponenten zu definieren🎜🎜rrreee🎜🎜In ngAfterViewInit() Code> Nachdem der Hook ausgeführt wurde, wird die direkte Unterkomponente bedient🎜🎜🎜🎜Fazit🎜🎜🎜Wir haben hier gerade über die Verwendung von Komponenten geschrieben, also komm schon~🎜<p>Weitere Kenntnisse zum Thema Programmierung finden Sie unter: <a href="https://www.php.cn/course.html" target="_blank" textvalue="编程入门">Einführung in die Programmierung</a>! ! </p>

Das obige ist der detaillierte Inhalt vonEine kurze Analyse der Inhaltsprojektion beim Lernen von Angular-Komponenten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Crossplay haben?
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

So installieren Sie die DirectPlay-Komponente der alten Windows 10-Version So installieren Sie die DirectPlay-Komponente der alten Windows 10-Version Dec 28, 2023 pm 03:43 PM

Viele Benutzer stoßen beim Spielen einiger Spiele unter Win10 immer auf Probleme, wie z. B. ein Einfrieren des Bildschirms und unscharfe Bildschirme. Zu diesem Zeitpunkt können wir das Problem lösen, indem wir die Directplay-Funktion aktivieren, und die Bedienungsmethode der Funktion ist ebenfalls sehr einfach. So installieren Sie DirectPlay, die alte Komponente von Win10 1. Geben Sie „Systemsteuerung“ in das Suchfeld ein und öffnen Sie es. 2. Wählen Sie große Symbole als Anzeigemethode. 3. Suchen Sie nach „Programme und Funktionen“. 4. Klicken Sie links, um oder zu aktivieren Win-Funktionen ausschalten 5. Wählen Sie hier die alte Version aus. Aktivieren Sie einfach das Kontrollkästchen

So installieren Sie Angular unter Ubuntu 24.04 So installieren Sie Angular unter Ubuntu 24.04 Mar 23, 2024 pm 12:20 PM

Angular.js ist eine frei zugängliche JavaScript-Plattform zum Erstellen dynamischer Anwendungen. Es ermöglicht Ihnen, verschiedene Aspekte Ihrer Anwendung schnell und klar auszudrücken, indem Sie die Syntax von HTML als Vorlagensprache erweitern. Angular.js bietet eine Reihe von Tools, die Sie beim Schreiben, Aktualisieren und Testen Ihres Codes unterstützen. Darüber hinaus bietet es viele Funktionen wie Routing und Formularverwaltung. In dieser Anleitung wird erläutert, wie Angular auf Ubuntu24 installiert wird. Zuerst müssen Sie Node.js installieren. Node.js ist eine JavaScript-Ausführungsumgebung, die auf der ChromeV8-Engine basiert und es Ihnen ermöglicht, JavaScript-Code auf der Serverseite auszuführen. In Ub sein

Ein Artikel über serverseitiges Rendering (SSR) in Angular Ein Artikel über serverseitiges Rendering (SSR) in Angular Dec 27, 2022 pm 07:24 PM

Kennen Sie Angular Universal? Es kann dazu beitragen, dass die Website eine bessere SEO-Unterstützung bietet!

Wie man PHP und Angular für die Frontend-Entwicklung verwendet Wie man PHP und Angular für die Frontend-Entwicklung verwendet May 11, 2023 pm 04:04 PM

Mit der rasanten Entwicklung des Internets wird auch die Front-End-Entwicklungstechnologie ständig verbessert und iteriert. PHP und Angular sind zwei Technologien, die in der Frontend-Entwicklung weit verbreitet sind. PHP ist eine serverseitige Skriptsprache, die Aufgaben wie die Verarbeitung von Formularen, die Generierung dynamischer Seiten und die Verwaltung von Zugriffsberechtigungen übernehmen kann. Angular ist ein JavaScript-Framework, mit dem Single-Page-Anwendungen entwickelt und komponentenbasierte Webanwendungen erstellt werden können. In diesem Artikel erfahren Sie, wie Sie PHP und Angular für die Frontend-Entwicklung verwenden und wie Sie diese kombinieren

Wie implementiert man eine Kalenderkomponente mit Vue? Wie implementiert man eine Kalenderkomponente mit Vue? Jun 25, 2023 pm 01:28 PM

Vue ist ein sehr beliebtes Front-End-Framework. Es bietet viele Tools und Funktionen wie Komponentisierung, Datenbindung, Ereignisbehandlung usw., die Entwicklern beim Erstellen effizienter, flexibler und einfach zu wartender Webanwendungen helfen können. In diesem Artikel werde ich vorstellen, wie man eine Kalenderkomponente mit Vue implementiert. 1. Anforderungsanalyse Zunächst müssen wir die Anforderungen dieser Kalenderkomponente analysieren. Ein einfacher Kalender sollte über die folgenden Funktionen verfügen: Anzeige der Kalenderseite des aktuellen Monats; Unterstützung des Wechsels zum vorherigen oder nächsten Monat; Unterstützung beim Klicken auf einen bestimmten Tag;

Grundlagen der VUE3-Entwicklung: Verwendung von Erweiterungen zum Erben von Komponenten Grundlagen der VUE3-Entwicklung: Verwendung von Erweiterungen zum Erben von Komponenten Jun 16, 2023 am 08:58 AM

Vue ist derzeit eines der beliebtesten Front-End-Frameworks, und VUE3 ist die neueste Version des Vue-Frameworks. Im Vergleich zu VUE2 bietet VUE3 eine höhere Leistung und ein besseres Entwicklungserlebnis und ist für viele Entwickler zur ersten Wahl geworden. In VUE3 ist die Verwendung von Erweiterungen zum Erben von Komponenten eine sehr praktische Entwicklungsmethode. In diesem Artikel wird erläutert, wie Erweiterungen zum Erben von Komponenten verwendet werden. Was heißt erweitert? In Vue ist Extends ein sehr praktisches Attribut, das für untergeordnete Komponenten verwendet werden kann, um von ihren Eltern zu erben.

Winkelkomponenten und ihre Anzeigeeigenschaften: Nicht-Block-Standardwerte verstehen Winkelkomponenten und ihre Anzeigeeigenschaften: Nicht-Block-Standardwerte verstehen Mar 15, 2024 pm 04:51 PM

Das Standardanzeigeverhalten für Komponenten im Angular-Framework gilt nicht für Elemente auf Blockebene. Diese Designwahl fördert die Kapselung von Komponentenstilen und ermutigt Entwickler, bewusst zu definieren, wie jede Komponente angezeigt wird. Durch explizites Festlegen der CSS-Eigenschaft display kann die Anzeige von Angular-Komponenten vollständig gesteuert werden, um das gewünschte Layout und die gewünschte Reaktionsfähigkeit zu erreichen.

So öffnen Sie die Einstellungen der alten Version von Win10-Komponenten So öffnen Sie die Einstellungen der alten Version von Win10-Komponenten Dec 22, 2023 am 08:45 AM

Die alten Win10-Komponenten müssen vom Benutzer selbst aktiviert werden, da viele Komponenten standardmäßig geschlossen sind. Der Vorgang ist sehr einfach Versionskomponenten? Öffnen 1. Klicken Sie auf Start und dann auf „Win-System“. 2. Klicken Sie, um die Systemsteuerung aufzurufen. 3. Klicken Sie dann auf das Programm unten. 4. Klicken Sie auf „Win-Funktionen aktivieren oder deaktivieren“. 5. Hier können Sie auswählen, was Sie möchten öffnen

See all articles