Heim  >  Artikel  >  Datenbank  >  Angular implementiert die Beispielfreigabe für das Vorladen-Verzögerungsmodul

Angular implementiert die Beispielfreigabe für das Vorladen-Verzögerungsmodul

小云云
小云云Original
2018-01-24 14:07:461699Durchsuche

In diesem Artikel wird hauptsächlich das Beispiel der Implementierung eines vorinstallierten Verzögerungsmoduls in Angular vorgestellt. Der Herausgeber findet es recht gut, daher werde ich es jetzt mit Ihnen teilen und als Referenz verwenden. Folgen wir dem Herausgeber und schauen wir uns das an. Ich hoffe, es kann allen helfen.

Bei der Verwendung von Route Lazy Loading haben wir vorgestellt, wie man Module zum Teilen von Anwendungen verwendet. Beim Zugriff auf dieses Modul lädt Angular dieses Modul. Aber es dauert ein wenig. Beim ersten Klick kommt es zu einer leichten Verzögerung.

Wir können dieses Problem beheben, indem wir Routen vorab laden. Router können verzögerte Module asynchron laden, während der Benutzer mit anderen Teilen interagiert. Dies ermöglicht Benutzern einen schnelleren Zugriff auf verzögerte Module.

In diesem Artikel wird die Vorladefunktion basierend auf dem vorherigen Beispiel hinzugefügt.

Im vorherigen Abschnitt wurde unsere Root-Route in main.routing.ts definiert und wir haben die Root-Route-Definition in app.module.ts verwendet.

Es ist zu beachten, dass die Home-Komponente im Voraus geladen wird. Wir werden diese Komponente nach dem Systemstart rendern.

Nachdem Angular die Home-Komponente gerendert hat, kann der Benutzer mit der Anwendung interagieren. Durch einfache Konfiguration können wir andere Module im Hintergrund vorladen.

Vorabladen aktivieren

Wir bieten eine Vorabladestrategie in der forRoot-Funktion.


import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';

import { AppComponent } from './app.component';
import { HomeComponent } from './home/home.component';
import { routes } from './main.routing';
import { RouterModule } from '@angular/router';
import { PreloadAllModules } from '@angular/router';

@NgModule({
 declarations: [
  AppComponent,
  HomeComponent
 ],
 imports: [
  BrowserModule,
  RouterModule.forRoot(routes, { preloadingStrategy: PreloadAllModules })
 ],
 providers: [],
 bootstrap: [AppComponent]
})
export class AppModule { }

Diese PreloadAllModules-Strategie stammt von @angular/router, daher müssen wir sie auch importieren.

Maßgeschneiderte Vorladestrategie

Es gibt zwei vordefinierte Strategien im Router-Paket:

  1. Kein Vorladen

  2. Alle Module vorab laden PreloadAllModules

Module nach 5 Sekunden laden

Sie können jedoch selbst eine individuelle Strategie definieren . Es ist einfacher als Sie denken. Beispielsweise möchten Sie die verbleibenden Module 5 Sekunden nach der Initialisierung Ihrer App laden.

Sie müssen die Schnittstelle PreloadingStrategy implementieren. Wir definieren eine benutzerdefinierte Strategieklasse von CustomPreloadingStrategy.


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());
  }
}

Ändern Sie dann app.module.ts, um diese benutzerdefinierte Strategie zu verwenden. Beachten Sie, dass Sie diese Klasse auch in Props hinzufügen müssen. um die Abhängigkeitsinjektion zu implementieren.


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 { }

Sie werden sehen, dass dieser Funktionsbaustein nach 5 Sekunden automatisch geladen wird.

Laden Sie das angegebene Modul

Wir können auch zusätzliche Parameter in der Route definieren, um anzugeben, welche Module vorab geladen werden sollen. Wir verwenden Daten in der Routendefinition, um diese zusätzlichen Daten bereitzustellen.


import { Routes } from &#39;@angular/router&#39;;
// HomeComponent this components will be eager loaded
import { HomeComponent } from &#39;./home/home.component&#39;;

export const routes: Routes = [
  { path: &#39;&#39;, component: HomeComponent, pathMatch: &#39;full&#39; },
  { path: &#39;shop&#39;, loadChildren: &#39;./shop/shop.module#ShopModule&#39;, data: {preload: true} },
  { path: &#39;**&#39;, component: HomeComponent }
];

Anschließend definieren wir die neue Ladestrategie.


import { Observable } from &#39;rxjs/Rx&#39;;
import { PreloadingStrategy, Route } from &#39;@angular/router&#39;;

export class PreloadSelectedModules implements PreloadingStrategy {
  preload(route: Route, load: Function): Observable<any> {
    return route.data && route.data.preload ? load() : Observable.of(null);
  }
}

Verwenden Sie diese Strategie schließlich in app.module.ts.


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 { PreloadSelectedModules } from &#39;./preload.module&#39;;

@NgModule({
 declarations: [
  AppComponent,
  HomeComponent
 ],
 imports: [
  BrowserModule,
  RouterModule.forRoot(routes, { preloadingStrategy: PreloadSelectedModules })
 ],
 providers: [PreloadSelectedModules ],
 bootstrap: [AppComponent]
})
export class AppModule { }

An dieser Stelle können Sie sehen, dass das Modul direkt vorinstalliert ist. Auch wenn Sie auf den Link klicken, erfolgt keine neue Anfrage.

Verwandte Empfehlungen:

Detaillierte Erklärung, wie Laravel Modellabfragen durch Vorladen optimiert

Erläuterung des Codes zum Implementieren vorinstallierter Animationseffekte einfach mit CSS

JS zum Implementieren des Bildvorladefunktionscodes außer Betrieb

Das obige ist der detaillierte Inhalt vonAngular implementiert die Beispielfreigabe für das Vorladen-Verzögerungsmodul. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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