


Lassen Sie uns über das verzögerte Laden von Modulen und die dynamische Anzeige ihrer Komponenten in Angular sprechen
Wie lade ich ein eckiges Modul langsam und erstelle dynamisch die darin deklarierten Komponenten ohne Routing? Der folgende Artikel stellt Ihnen die Methode vor und ich hoffe, er wird Ihnen hilfreich sein!
Umgebung: Angular 13.x.x
angular unterstützt das verzögerte Laden bestimmter Seitenmodule durch Routing, um die Größe des ersten Bildschirms zu reduzieren und die Ladegeschwindigkeit des ersten Bildschirms zu verbessern Der Bedarf kann nicht gedeckt werden. [Verwandte Tutorial-Empfehlung: „AngularJS-Video-Tutorial“]
Nach dem Klicken auf eine Schaltfläche wird beispielsweise eine Reihe von Symbolleisten angezeigt. Ich möchte nicht, dass diese Symbolleistenkomponente inmain.js standardmäßig, aber nachdem der Benutzer auf die Schaltfläche geklickt hat, wird die Komponente dynamisch geladen und angezeigt. <p><code>main.js
, 而是用户点按钮后动态把组件加载并显示出来.
那为什么要动态加载呢? 如果直接在目标页面组件引入工具栏组件, 那么工具栏组件中的代码就会被打包进目标页面组件所在的模块, 这会导致目标页面组件所在的模块生成的js体积变大; 通过动态懒加载的方式, 可以让工具栏组件只在用户点了按钮后再加载, 这样就可以达到减少首屏尺寸的目的.
为了演示, 新建一个angular项目, 然后再新建一个ToolbarModule
, 项目的目录结构如图
为了达到演示的目的, 我在ToolbarModule
的html模板中放了个将近1m的base64图片, 然后直接在AppModule
中引用ToolbarModule
, 然后执行ng build
, 执行结果如图
可以看到打包尺寸到达了1.42mb
, 也就是说用户每次刷新这个页面, 不管用户有没有点击显示工具栏按钮, 工具栏组件相关的内容都会被加载出来, 这造成了资源的浪费, 所以下面将ToolbarModule
从AppModule
的imports
声明中移除, 然后在用户点击首次点击显示时懒加载工具栏组件.
懒加载工具栏组件
首先, 新建一个ToolbarModule
和ToolbarComponent
, 并在ToolbarModule
声明ToolbarComponent
toolbar.module.ts
import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { ToolbarComponent } from './toolbar.component'; @NgModule({ declarations: [ToolbarComponent], imports: [CommonModule], exports: [ToolbarComponent], }) class ToolbarModule {} export { ToolbarComponent, ToolbarModule };
toolbar.component.ts
import { Component, OnInit } from '@angular/core'; @Component({ selector: 'toolbar', templateUrl: './toolbar.component.html', styles: [ ` svg { width: 64px; height: 64px; } Lassen Sie uns über das verzögerte Laden von Modulen und die dynamische Anzeige ihrer Komponenten in Angular sprechen { width: 64px; height: 64px; object-fit: cover; } `, ], }) export class ToolbarComponent implements OnInit { constructor() {} ngOnInit(): void {} }
toolbar.component.html
<p class="flex"> <svg t="1652618923451" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2104" width="200" height="200"><path d="M412 618m-348 0a348 348 0 1 0 696 0 348 348 0 1 0-696 0Z" fill="#C9F4EB" p-id="2105"></path><path d="M673.19 393h-333a25 25 0 0 1 0-50h333a25 25 0 0 1 0 50zM600.89 235H423.11C367.91 235 323 190.28 323 135.32v-12.5a25 25 0 0 1 50 0v12.5c0 27.39 22.48 49.68 50.11 49.68h177.78c27.63 0 50.11-22.29 50.11-49.68v-16.5a25 25 0 1 1 50 0v16.5c0 54.96-44.91 99.68-100.11 99.68zM673.19 585.5h-333a25 25 0 0 1 0-50h333a25 25 0 0 1 0 50zM467 778H340a25 25 0 0 1 0-50h127a25 25 0 0 1 0 50z" fill="#087E6A" p-id="2106"></path><path d="M739.76 952H273.62a125.14 125.14 0 0 1-125-125V197a125.14 125.14 0 0 1 125-125h466.14a125.14 125.14 0 0 1 125 125v630a125.14 125.14 0 0 1-125 125zM273.62 122a75.08 75.08 0 0 0-75 75v630a75.08 75.08 0 0 0 75 75h466.14a75.08 75.08 0 0 0 75-75V197a75.08 75.08 0 0 0-75-75z" fill="#087E6A" p-id="2107"></path></svg> <svg t="1652618941842" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2247" width="200" height="200"> <path d="M415 624m-348 0a348 348 0 1 0 696 0 348 348 0 1 0-696 0Z" fill="#C9F4EB" p-id="2248"></path> <path d="M695 790H362a25 25 0 0 1 0-50h333a25 25 0 0 1 0 50zM583 649H362a25 25 0 0 1 0-50h221a25 25 0 0 1 0 50zM262 287H129a25 25 0 0 1 0-50h133a25 25 0 0 1 0 50zM262 455.33H129a25 25 0 1 1 0-50h133a25 25 0 0 1 0 50zM262 623.67H129a25 25 0 0 1 0-50h133a25 25 0 0 1 0 50zM262 792H129a25 25 0 0 1 0-50h133a25 25 0 0 1 0 50z" fill="#087E6A" p-id="2249"></path> <path d="M761.76 964H295.62a125.14 125.14 0 0 1-125-125V209a125.14 125.14 0 0 1 125-125h466.14a125.14 125.14 0 0 1 125 125v630a125.14 125.14 0 0 1-125 125zM295.62 134a75.09 75.09 0 0 0-75 75v630a75.08 75.08 0 0 0 75 75h466.14a75.08 75.08 0 0 0 75-75V209a75.09 75.09 0 0 0-75-75z" fill="#087E6A" p-id="2250"></path> <path d="M617 376H443a25 25 0 0 1 0-50h174a25 25 0 0 1 0 50z" fill="#087E6A" p-id="2251"></path> <path d="M530 463a25 25 0 0 1-25-25V264a25 25 0 0 1 50 0v174a25 25 0 0 1-25 25z" fill="#087E6A" p-id="2252"></path> </svg> <Lassen Sie uns über das verzögerte Laden von Modulen und die dynamische Anzeige ihrer Komponenten in Angular sprechen src="<这里应该是一张大小将近1M的base64图片, 内容较大, 就略去了...>" alt=""> </p>
然后再AppComponent
的中按钮点击事件处理程序中写加载工具栏模块的代码:
app.component.ts
import { Component, createNgModuleRef, Injector, ViewChild, ViewContainerRef } from '@angular/core'; @Component({ selector: 'root', template: ` <p class="container h-screen flex items-center flex-col w-100 justify-center"> <p class="mb-3" [ngClass]="{ hidden: !isToolbarVisible }"> <ng-container #toolbar></ng-container> </p> <p> <button (click)="toggleToolbarVisibility()" class="bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded">{{ isToolbarVisible ? '隐藏' : '显示' }}</button> <p class="mt-3">首屏内容</p> </p> </p> `, }) export class AppComponent { title = 'ngx-lazy-load-demo'; toolbarLoaded = false; isToolbarVisible = false; @ViewChild('toolbar', { read: ViewContainerRef }) toolbarViewRef!: ViewContainerRef; constructor(private _injector: Injector) {} toggleToolbarVisibility() { this.isToolbarVisible = !this.isToolbarVisible; this.loadToolbarModule().then(); } private async loadToolbarModule() { if (this.toolbarLoaded) return; this.toolbarLoaded = true; const { ToolbarModule, ToolbarComponent } = await import('./toolbar/toolbar.module'); const moduleRef = createNgModuleRef(ToolbarModule, this._injector); const { injector } = moduleRef; const componentRef = this.toolbarViewRef.createComponent(ToolbarComponent, { injector, ngModuleRef: moduleRef, }); } }
关键在于其中的第32-42行, 首先通过一个动态import
导入toolbar.module.ts
中的模块, 然后调用createNgModuleRef
并传入当前组件的Injector
作为ToolbarModule
的父级Injector
, 这样就实例化了ToolbarModule
得到了moduleRef
对象, 最后就是调用html模板中声明的<ng-container #toolbar></ng-container>
的ViewContainerRef
对象的createComponent
方法创建ToolbarComponent
组件
private async loadToolbarModule() { if (this.toolbarLoaded) return; this.toolbarLoaded = true; const { ToolbarModule, ToolbarComponent } = await import('./toolbar/toolbar.module'); const moduleRef = createNgModuleRef(ToolbarModule, this._injector); const { injector } = moduleRef; const componentRef = this.toolbarViewRef.createComponent(ToolbarComponent, { injector, ngModuleRef: moduleRef, }); }
此时再来看下这番操作后执行ng build
打包的尺寸大小
可以看到首屏尺寸没有开头那么离谱了, 原因是没有在AppModule
和AppComponent
直接导入ToolbarModule
和ToolbarComponent
, ToolbarModule
被打进了另外的js文件中(Lazy Chunk Files), 当首次点击显示
按钮时, 就会加载这个包含ToolbarModule
的js文件
注意看下面的gif演示中, 首次点击显示
按钮, 浏览器网络调试工具中会多出一个对src_app_toolbar_toolbar_module_ts.js
Warum muss sie dann dynamisch geladen werden, wenn die Symbolleistenkomponente direkt in die Zielseitenkomponente eingeführt wird? Die Symbolleistenkomponente wird in das Modul gepackt, in dem sich die Zielseitenkomponente befindet. Dies führt dazu, dass die Größe der von dem Modul generierten JS, in der sich die Zielseitenkomponente befindet, durch dynamisches verzögertes Laden größer wird kann erst geladen werden, nachdem der Benutzer auf die Schaltfläche geklickt hat, wodurch die Größe des ersten Bildschirms reduziert wird.
Erstellen Sie zur Demonstration ein neues Winkelprojekt und erstellen Sie dann ein neues ToolbarModule
Projekt ist wie gezeigt
1,42 MB
erreicht hat, was bedeutet, dass jedes Mal, wenn der Benutzer diese Seite aktualisiert, der Inhalt angezeigt wird, unabhängig davon, ob der Benutzer auf die Schaltfläche „Symbolleiste anzeigen“ klickt oder nicht Im Zusammenhang mit der Symbolleistenkomponente wird geladen, was zu einer Verschwendung von Ressourcen führt. Daher wird das folgende ToolbarModule
aus der imports
-Deklaration von AppModule
entfernt > und lädt dann die Symbolleistenkomponente träge, wenn der Benutzer auf den ersten Klick klickt, um sie anzuzeigen und ToolbarComponent
und deklarieren Sie ToolbarModule
ToolbarComponent🎜🎜toolbar.module.ts
rrreee Details>toolbar.component.ts
rrreeetoolbar.component.html
rrreeeAppComponent
:🎜app.component.ts
rrreee über ein dynamisches <code>import
-Modul in toolbar.module.ts, rufen Sie dann createNgModuleRef
auf und übergeben Sie das Injector
der aktuellen Komponente als übergeordnetes Element von ToolbarModule
Injector, wodurch ToolbarModule
instanziiert und die moduleRef abgerufen wird
-Objekt und schließlich Aufruf des in der HTML-Vorlage deklarierten <ng-container die>createComponent</ng-container>
-Methode des ViewContainerRef
-Objekts der Symbolleiste> erstellt die Komponente ToolbarComponent
ToolbarModule
keine direkte Verbindung zwischen AppModule
und AppComponent
gibt > und ToolbarComponent
, ToolbarModule
wird in eine andere js-Datei (Lazy Chunk Files) importiert. Wenn zum ersten Mal auf die Schaltfläche geklickt wird, wird die js Es wird eine Datei mit <code>ToolbarModule
geladen🎜🎜Bitte sehen Sie sich die folgende GIF-Demonstration an. Klicken Sie zum ersten Mal auf die Schaltfläche Anzeigen
. Im Netzwerk-Debugging-Tool des Browsers wird noch eine weitere angezeigt Anfrage für die Datei src_app_toolbar_toolbar_module_ts.js
🎜🎜🎜🎜🎜Für mehr Programmierkenntnisse besuchen Sie bitte: 🎜Programmiervideo🎜! ! 🎜Das obige ist der detaillierte Inhalt vonLassen Sie uns über das verzögerte Laden von Modulen und die dynamische Anzeige ihrer Komponenten in Angular sprechen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

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

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

Da Webanwendungen immer komplexer werden, müssen Frontend-Entwickler die Funktionalität und das Benutzererlebnis verbessern und gleichzeitig die Seitenladegeschwindigkeit gewährleisten. Dabei handelt es sich um verzögertes Laden und Vorladen von Vue-Komponenten, die wichtige Mittel zur Optimierung der Leistung von Vue-Anwendungen darstellen. Dieser Artikel bietet eine ausführliche Einführung in die Implementierungsmethoden des verzögerten Ladens und Vorladens von Vue-Komponenten. 1. Was ist Lazy Loading? Lazy Loading bedeutet, dass der Code einer Komponente nur dann geladen wird, wenn der Benutzer darauf zugreifen muss, anstatt den Code aller Komponenten zu Beginn zu laden

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.

Vue3 ist ein beliebtes JavaScript-Framework, das einfach zu erlernen und zu verwenden, effizient und stabil ist und sich besonders gut zum Erstellen von Single-Page-Anwendungen (SPA) eignet. Die Lazy-Funktion in Vue3 kann als eines der leistungsstarken Tools zum Lazy Loading von Komponenten die Leistung der Anwendung erheblich verbessern. In diesem Artikel werden die Verwendung und die Prinzipien der Lazy-Funktion in Vue3 sowie ihre Anwendungsszenarien und Vorteile in der tatsächlichen Entwicklung ausführlich erläutert. Was ist Lazy Loading? Bei der traditionellen Front-End- und Back-End-Entwicklung müssen sich Front-End-Entwickler häufig mit einer großen Anzahl von Problemen befassen

Dieser Artikel führt Sie durch die Methode zum Übertragen von Daten zwischen übergeordneten und untergeordneten Angular-Komponenten (Component) und stellt die Methode zum Übertragen von Daten durch übergeordnete Komponenten an untergeordnete Komponenten und untergeordnete Komponenten zum Übertragen von Daten an übergeordnete Komponenten in Angular vor an alle!

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

Die Authentifizierung ist einer der wichtigsten Teile jeder Webanwendung. In diesem Tutorial werden tokenbasierte Authentifizierungssysteme und ihre Unterschiede zu herkömmlichen Anmeldesystemen erläutert. Am Ende dieses Tutorials sehen Sie eine voll funktionsfähige Demo, die in Angular und Node.js geschrieben wurde. Traditionelle Authentifizierungssysteme Bevor wir zu tokenbasierten Authentifizierungssystemen übergehen, werfen wir einen Blick auf traditionelle Authentifizierungssysteme. Der Benutzer gibt seinen Benutzernamen und sein Passwort im Anmeldeformular ein und klickt auf „Anmelden“. Nachdem Sie die Anfrage gestellt haben, authentifizieren Sie den Benutzer im Backend, indem Sie die Datenbank abfragen. Wenn die Anfrage gültig ist, wird eine Sitzung mit den aus der Datenbank erhaltenen Benutzerinformationen erstellt und die Sitzungsinformationen werden im Antwortheader zurückgegeben, sodass die Sitzungs-ID im Browser gespeichert wird. Bietet Zugriff auf Anwendungen, die unterliegen
