Heim Web-Frontend js-Tutorial Eine kurze Diskussion über die Vorladekonfiguration und die Lazy-Loading-Konfiguration in Angular

Eine kurze Diskussion über die Vorladekonfiguration und die Lazy-Loading-Konfiguration in Angular

Nov 05, 2021 am 10:13 AM
angular 路由配置

In diesem Artikel erfahren Sie mehr über die Routing-Konfiguration in Angular und stellen die Preload-Konfiguration und die Lazy-Loading-Konfiguration kurz vor. Ich hoffe, dass er für alle hilfreich ist!

Eine kurze Diskussion über die Vorladekonfiguration und die Lazy-Loading-Konfiguration in Angular

NgModule ist der Kern des Angular-Moduls. Lassen Sie uns zuerst darüber sprechen.

1. Die Rolle von @NgModule:

  • Die grundlegendste Bedeutung von NgModule besteht darin, Entwicklern dabei zu helfen, Geschäftscode zu organisieren, was oberste Priorität hat.
  • NgModule wird verwendet, um zu steuern, ob Komponenten, Anweisungen, Pipes usw. verwendet werden können. Komponenten im selben NgModule sind standardmäßig füreinander sichtbar, während bei externen Komponenten nur die von NgModule exportierten Inhalte sichtbar sind Das heißt, wenn das von Ihnen definierte NgModule keine Inhalte exportiert, können externe Benutzer keine darin definierten Inhalte verwenden, selbst wenn sie Ihr Modul importieren.
  • NgModule ist die kleinste Einheit, die beim Packen verwendet wird. Beim Packen werden alle @NgModule- und Routing-Konfigurationen überprüft. Die unterste Ebene von Angular wird mit Webpack gepackt. Da Angular das Webpack bereits für uns konfiguriert hat, ist es für Entwickler viel einfacher, andernfalls müssen sie die Umgebung selbst konfigurieren.
  • NgModule ist die kleinste Einheit, die der Router asynchron laden kann. Die kleinste Einheit, die der Router laden kann, ist ein Modul, keine Komponente. Natürlich ist es erlaubt, nur eine Komponente in einem Modul zu platzieren, und viele Komponentenbibliotheken tun dies. [Verwandte Tutorial-Empfehlungen: „Angular-Tutorial“]

2. @NgModule-Strukturbeschreibung:

@NgModule({ 
  declarations: [], //属于当前模块的组件、指令及管道
  imports: [], //当前模板所依赖的项,即外部模块(包括httpModule、路由等)
  export:[],//声明出应用给其他的module使用
  providers: [], //注入服务到当前模块
  bootstrap: []//默认启动哪个组件(只有根模块才能设置bootstrap属性)
})
Nach dem Login kopieren

3. Das Code>-Objekt stellt zwei statische Methoden bereit: forRoot() und forChild() zum Konfigurieren von Routing-Informationen.

forRoot()//Definieren Sie die Hauptrouting-Informationen im Hauptmodul

forChild()``//Anwenden im Funktionsmodul (Untermodul) RouterModule对象提供了两个静态的方法:forRoot()forChild()来配置路由信息。

  • forRoot()//在主模块中定义主要的路由信息
  • forChild()``//应用在特性模块(子模块)中

(2)懒加载:loadChildren

此处并没有将对应的模块加入到AppModule中,而是通过loadChildren属性,告诉Angular路由依据loadChildren属性配置的路径去加载对应的模块。这就是模块懒加载功能的具体应用,当用户访问 /xxx/** 路径的时候,才会加载对应的模块,这减少了应用启动时加载资源的大小。 loadChildren的属性值由三部分组成:

  • 需要导入Module的相对路径
  • #分隔符
  • 导出模块类的名称

(3)预加载

在使用懒加载的情况下,路由第一次加载某个模块时,有时反应有延迟。这时就可以用预加载策略来解决这个问题。

Angular提供了两种加载策略,

  • PreloadAllModules-预加载
  • NoPreloading-没有预加载(默认)。

RouterModule.forRoo()第二个参数可以添加配置选项,配置选项中就有一个是preloadingStrategy

(2) Lazy Loading: LoadChildren

Das entsprechende Modul wird hier nicht zum AppModule hinzugefügt, aber das Attribut loadChildren wird verwendet, um Angular anzuweisen, basierend auf loadChildren zu routen. Der durch das Attribut code> konfigurierte Pfad wird zum Laden des entsprechenden Moduls verwendet. Dies ist die spezifische Anwendung der Modul-Lazy-Loading-Funktion. Wenn der Benutzer auf den Pfad /xxx/** zugreift, wird das entsprechende Modul geladen, wodurch die Größe der geladenen Ressourcen beim Start der Anwendung reduziert wird. Der Attributwert von LoadChildren besteht aus drei Teilen:

Der relative Pfad des importierten Moduls

#-Trennzeichen

Der Name der exportierten Modulklasse

(3) Vorladen Im Fall von Lazy Loading , Wenn das Routing ein Modul zum ersten Mal lädt, kommt es manchmal zu einer Verzögerung der Antwort. Zu diesem Zeitpunkt können Sie die Vorladestrategie verwenden, um dieses Problem zu lösen.

Angular bietet zwei Ladestrategien:

PreloadAllModules-Vorladen
  • NoPreloading-kein Vorladen (Standard).

  • Der zweite Parameter von RouterModule.forRoo() kann Konfigurationsoptionen hinzufügen. Eine der Konfigurationsoptionen ist die preloadingStrategy-Konfiguration ist eine vorinstallierte Richtlinienkonfiguration.
  • //使用默认预加载-预加载全部模块
    import { NgModule } from '@angular/core'; 
    import { AppComponent } from './app.component'; 
    import { routes } from './main.routing'; 
    import { RouterModule } from '@angular/router'; 
    import { PreloadAllModules } from '@angular/router'; 
    @NgModule({ 
      declarations: [AppComponent], 
      imports: [ BrowserModule, RouterModule.forRoot(routes, { preloadingStrategy: PreloadAllModules }) ], 
      providers: [], 
      bootstrap: [AppComponent] }) 
    export class AppModule { }
    Nach dem Login kopieren

    Wir ziehen es jedoch vor, das Vorladen von Modulen selbst zu steuern.

  • A Alle Module nach 5 Sekunden benutzerdefiniert laden.
  • Erstellen Sie einen neuen benutzerdefinierten Wert auf derselben Ebene wie app -preloading-strategy.ts-Datei

    import { Route } from '@angular/router';
    import { PreloadingStrategy } from '@angular/router';
    import { Observable } from 'rxjs/Rx';
    
    export class CustomPreloadingStrategy implements PreloadingStrategy {
        preload(route: Route, fn: () => Observable<boolean>): Observable<boolean> {
            return Observable.of(true).delay(5000).flatMap((_: boolean) => fn());
        }
    }
    Nach dem Login kopieren
  • Injizieren Sie
  • import { BrowserModule } from &#39;@angular/platform-browser&#39;;
    import { NgModule } from &#39;@angular/core&#39;;
    
    import { AppComponent } from &#39;./app.component&#39;;
    import { HomeComponent } from &#39;./home/home.component&#39;;
    import { routes } from &#39;./main.routing&#39;;
    import { RouterModule } from &#39;@angular/router&#39;;
    import { CustomPreloadingStrategy } from &#39;./preload&#39;;
    
    @NgModule({
      declarations: [
        AppComponent,
        HomeComponent
      ],
      imports: [
        BrowserModule,
        RouterModule.forRoot(routes, { preloadingStrategy:  CustomPreloadingStrategy })
      ],
      providers: [CustomPreloadingStrategy ],
      bootstrap: [AppComponent]
    })
    export class AppModule { }
    Nach dem Login kopieren

    in die Anbieter von app.modules.ts B. Anpassen – Vorladen des Moduls angeben

  • Erstellen Sie eine neue Datei „selective-preloading-strategy.ts“ auf derselben Ebene wie die App wird erstellt (Sie müssen die Anbieter in app-routing.module.ts einfügen und dann die in der Route definierten Daten über zusätzliche Parameter festlegen, um festzulegen, ob vorab geladen werden soll)
  • import { Injectable } from &#39;@angular/core&#39;;
    import { PreloadingStrategy, Route } from &#39;@angular/router&#39;;
    import { Observable} from &#39;rxjs/Observable&#39;;
    import &#39;rxjs/add/observable/of&#39;;
    @Injectable()
    export class SelectivePreloadingStrategy implements PreloadingStrategy {
      preloadedModules: string[] = [];
    
      preload(route: Route, load: () => Observable<any>): Observable<any> {
        if (route.data && route.data[&#39;preload&#39;]) {
          return load();
        } else {
          return Observable.of(null);
        }
      }
    }
    Nach dem Login kopieren

    app-routing.module.ts (Verzögertes Laden dieser Datei ähnelt dem Vorladen von Combined)

    import { NgModule } from &#39;@angular/core&#39;;
    import { RouterModule, Routes } from &#39;@angular/router&#39;;
    import { CanDeactivateGuard } from &#39;./guard/can-deactivate-guard.service&#39;;
    import { SelectivePreloadingStrategy } from &#39;./selective-preloading-strategy&#39;; // 预加载
    import { PageNotFoundComponent } from &#39;./not-found.component&#39;;
    const appRoutes: Routes = [
    { path: &#39;&#39;, redirectTo: &#39;home&#39;, pathMatch: &#39;full&#39;},
    { path: &#39;mian&#39;, loadChildren: &#39;./main/mian.module#MainModule&#39; }, // 懒加载(在这个层级的router配置文件及module文件都不需要引入该组建)
    { path: &#39;home&#39;, loadChildren: &#39;./home/home.module#HomeModule&#39;, data: { preload: true } }, // 懒加载 + 预加载
    { path: &#39;**&#39;, component: PageNotFoundComponent } // 注意要放到最后
    ];
    @NgModule({
      imports: [
        RouterModule.forRoot(appRoutes,{
          enableTracing: true, // <-- debugging purposes only
          preloadingStrategy: SelectivePreloadingStrategy // 预加载
        })
      ],
      exports: [
        RouterModule
      ],
      providers: [
        CanDeactivateGuard,
        SelectivePreloadingStrategy
      ]
    })
    export class AppRoutingModule { }
    Nach dem Login kopieren
  • 4. Schritte zur Erstellung von Unterrouten (keine Anweisungen zum Erstellen, direkt manuell)

    • (1) Erstellen Sie einen neuen Hauptordner
      Verzeichnis main
      • main.component.html
      • main.component.scss
    • main.component.ts
      • main.modul.ts
    • main-routing.module.ts
      • main.service .ts
    • Verzeichnis B
      • B.component.html
      • b.component.scss

b.component.ts

🎜🎜 FORE BEIL IN Main.comPonent.html oben gibt es eine Bereich zum Platzieren von Unteransichten (ich werde zuerst über die Ideen sprechen und dann den Schlüsselcode eingeben, auf den Rest werde ich nicht näher eingehen)🎜
<div>下面的区域是另一个路由出口</div>
<router-outlet></router-outlet><!--此处依照下面的路由配置,默认显示AComponent组件的内容-->
Nach dem Login kopieren
🎜(1) Konfigurieren Sie das Routing unter dem Ordner main in main-. Routing.module.ts. Sie müssen auf die Komponenten jeder Komponente verweisen (die Komponenten, die für das Routing konfiguriert werden müssen)🎜
import {NgModule} from &#39;@angular/core&#39;;
import {RouterModule, Routes} from &#39;@angular/router&#39;;
import {MainComponent} from &#39;./main.component&#39;;
import{AComponent} from &#39;./A/A.component&#39;;
import{BComponent} from &#39;./B/B.component&#39;;
const mainRoute: Routes = [
  {
    path: &#39;&#39;,
    component: MainComponent,
    data: {
      title: &#39;面试预约&#39;,
    },
    children: [
      {
        path: &#39;&#39;,//path为空表示默认路由
        component: AComponent,
        data: {
          title: &#39;大活动&#39;,
        }
      },
      {
        path: &#39;activity&#39;,
        component: BComponent,
        data: {
          title: &#39;中活动&#39;,
        }
      }
    ]
  }
];


@NgModule({
  imports: [
    RouterModule.forChild(mainRoute)
  ],
  exports: [
    RouterModule
  ]
})
export class MainRoutingModule{
}
Nach dem Login kopieren
🎜 (2), main.service.ts wird im Allgemeinen zum Platzieren von HTTP-Anfragen verwendet🎜
import { AppService } from &#39;./../../app.service&#39;;
import { Observable } from &#39;rxjs/Observable&#39;;
import { Injectable } from &#39;@angular/core&#39;;
import { HttpParams } from &#39;@angular/common/http&#39;;
import { PageData, ActivitysManage } from &#39;./model/activitys-manage&#39;;
import { BehaviorSubject } from &#39;rxjs&#39;;
import {PageDataBig, ActivitySmall, PageDataSmall } from &#39;./model/activitys-manage&#39;;
@Injectable()
export class MainService {
  
}
Nach dem Login kopieren

main文件夹下的组件如要调用MainService,需要在组件的ts文件引入MainService

(3)、在main.module.ts中引入各组件(包括自身、路由配置文件所用到的所有组件以及路由的module)

import { FormsModule } from &#39;@angular/forms&#39;;
import { CommonModule } from &#39;@angular/common&#39;;
import { MainComponent } from &#39;./interview-appointment.component&#39;;
import { AComponent } from &#39;./A/A.component&#39;;
import { BComponent } from &#39;./B/B.component&#39;;
import { NgModule } from &#39;@angular/core&#39;;
import { CoreFrameCommonModule } from &#39;../../common/common.module&#39;;
import { MainRoutingModule } from &#39;./main-routing.module&#39;;
import { NgZorroAntdModule } from &#39;../../zorro/ng-zorro-antd.module&#39;;
import { MainService } from &#39;./interview-appointment.service&#39;;
@NgModule({
  imports: [FormsModule,CoreFrameCommonModule, CommonModule, MainRoutingModule,NgZorroAntdModule],
  exports: [],
  declarations: [MainComponent,AComponent,BComponent],
  providers: [MainService],
})
export class MainModule{ }
Nach dem Login kopieren

更多编程相关知识,请访问:编程视频!!

Das obige ist der detaillierte Inhalt vonEine kurze Diskussion über die Vorladekonfiguration und die Lazy-Loading-Konfiguration in Angular. 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)

Lassen Sie uns über Metadaten und Dekoratoren in Angular sprechen Lassen Sie uns über Metadaten und Dekoratoren in Angular sprechen Feb 28, 2022 am 11:10 AM

Dieser Artikel setzt das Erlernen von Angular fort, führt Sie zum Verständnis der Metadaten und Dekoratoren in Angular und erläutert kurz deren Verwendung. Ich hoffe, dass er für alle hilfreich ist!

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

Detaillierte Erläuterung des Angular Learning State Managers NgRx Detaillierte Erläuterung des Angular Learning State Managers NgRx May 25, 2022 am 11:01 AM

Dieser Artikel vermittelt Ihnen ein detailliertes Verständnis des Angular-Statusmanagers NgRx und stellt Ihnen die Verwendung von NgRx vor. Ich hoffe, er wird Ihnen hilfreich 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!

Angular + NG-ZORRO entwickeln schnell ein Backend-System Angular + NG-ZORRO entwickeln schnell ein Backend-System Apr 21, 2022 am 10:45 AM

In diesem Artikel erfahren Sie, wie Sie mit Angular in Kombination mit ng-zorro schnell ein Backend-System entwickeln. Ich hoffe, dass er für alle hilfreich ist.

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

Eine kurze Analyse der Verwendung des Monaco-Editors in Angular Eine kurze Analyse der Verwendung des Monaco-Editors in Angular Oct 17, 2022 pm 08:04 PM

Wie verwende ich den Monaco-Editor in Angular? Der folgende Artikel dokumentiert die Verwendung des Monaco-Editors in Angular, der kürzlich in einem Unternehmen verwendet wurde. Ich hoffe, dass er für alle hilfreich sein wird!

Wie verwende ich das CodeIgniter4-Framework in PHP? Wie verwende ich das CodeIgniter4-Framework in PHP? May 31, 2023 pm 02:51 PM

PHP ist eine sehr beliebte Programmiersprache und CodeIgniter4 ist ein häufig verwendetes PHP-Framework. Bei der Entwicklung von Webanwendungen ist die Verwendung von Frameworks sehr hilfreich. Sie können den Entwicklungsprozess beschleunigen, die Codequalität verbessern und die Wartungskosten senken. In diesem Artikel wird die Verwendung des CodeIgniter4-Frameworks vorgestellt. Installation des CodeIgniter4-Frameworks Das CodeIgniter4-Framework kann von der offiziellen Website (https://codeigniter.com/) heruntergeladen werden. Runter

See all articles