Heim  >  Artikel  >  Web-Frontend  >  Detaillierte Erläuterung des Beispiels zum Vorladen der Angular2-Route

Detaillierte Erläuterung des Beispiels zum Vorladen der Angular2-Route

小云云
小云云Original
2018-01-27 14:21:001289Durchsuche

In diesem Artikel wird hauptsächlich die Angular2-Routing-Vorladestrategie vorgestellt. Der Herausgeber findet sie recht gut. Jetzt werde ich sie mit Ihnen teilen und als Referenz verwenden. Folgen wir dem Herausgeber und schauen wir uns das an. Ich hoffe, es kann allen helfen.

1. Problembeschreibung

Wenn die Route nicht langsam geladen wird, ist das Laden bei der ersten Verwendung extrem langsam. Wenn Sie es zum ersten Mal verwenden, werden die anderen Module erst geladen, wenn Sie sie tatsächlich verwenden Wenn Sie die Browserkonsole aufrufen, um das Laden von js anzuzeigen, werden Sie feststellen, dass bei der Verwendung das entsprechende js geladen wird. Dadurch friert die Funktion des entsprechenden Moduls zum ersten Mal ein, stoppt jedoch nicht, wenn es verwendet wird Später erkläre ich Ihnen, wie Sie das Problem mit der Vorladestrategie lösen können.

2. Vorladestrategie

Die zweite Konfigurationsoption von RouterModule.forRoot ist natürlich die PreloadingStrategy-Konfiguration , es gibt andere Konfigurationen. Hier geht es nur um die Vorladestrategie. In einigen Szenarien müssen wir sie nicht konfigurieren , wir erstellen eine neue Klasse, um die Preload-Methode der PreloadingStrategy-Schnittstelle zu implementieren. Der Code lautet wie folgt:


import { PreloadingStrategy, Route } from "@angular/router";
import { Observable } from "rxjs";
/**
 * 预加载策略
 */
export class SelectivePreloadingStrategy implements PreloadingStrategy {
  preload(route: Route, load: Function): Observable<any> {
    //当路由中配置data: {preload: true}时预加载
    return route.data && route.data && route.data[&#39;preload&#39;] ? load() : Observable.of(null);
  }

}

Die obige Bedeutung ist sehr einfach. Nachdem Sie den Parameter data: {preload: true} in der Route konfiguriert haben, gibt die Strategie hier einen Load() zurück, der angibt, dass ein Vorladen erforderlich ist. Das Vorladen wird natürlich nicht durchgeführt. Die Standardeinstellung ist, dass das Vorladen nicht durchgeführt werden muss, genau wie bei meinem Github, Sie können es flexibel verwenden.

Fügen Sie als Nächstes die Richtlinie zur Route hinzu, die die Konfiguration in RouterModule.forRoot darstellt. Der Code lautet wie folgt:


import { NgModule }       from &#39;@angular/core&#39;;
import { RouterModule, Routes } from &#39;@angular/router&#39;;

import {SelectivePreloadingStrategy} from "./selective-preloading-strategy";

import { LoginComponent }   from &#39;./login/login.component&#39;;
import { MainComponent }  from &#39;./main/main.component&#39;;



/**
 * app路由
 */
const routes: Routes = [
 { path: &#39;&#39;, redirectTo: &#39;/login&#39;, pathMatch: &#39;full&#39; },
 { 
   path: &#39;login&#39;, 
   component: LoginComponent
 },
 { 
   path: &#39;app&#39;, 
   component: MainComponent,
   loadChildren: &#39;app/main/main.module#MainModule&#39;,
   data: {preload: true}
 }
];

export const appRoutes=RouterModule.forRoot(routes,{preloadingStrategy: SelectivePreloadingStrategy});

Außerdem muss es in den Anbietern von AppModule hinzugefügt werden, der Code lautet wie folgt:


/**
 * app模块
 */
@NgModule({
 imports: [
  appRoutes,
  BrowserModule,
  BrowserAnimationsModule,
  NgbModule.forRoot(),
  MainModule,
  LoginModule
 ],
 declarations: [
  AppComponent,
  ToastBoxComponent,
  ToastComponent,
  SpinComponent
 ],
 providers: [AppService,ToastService,HttpService,SpinService,SelectivePreloadingStrategy],
 exports:[ToastBoxComponent,SpinComponent],
 bootstrap: [ AppComponent ]
})
export class AppModule {}

Als nächstes wird es beim Routing verwendet, der Code lautet wie folgt :


import { NgModule, OnInit } from &#39;@angular/core&#39;;
import { RouterModule, Routes, Router } from &#39;@angular/router&#39;;

/**
 * 主体路由
 */
const routes: Routes = [
   { path: &#39;home&#39;, loadChildren: &#39;app/home/home.module#HomeModule&#39;, data: {preload: true} },
   { path: &#39;demo&#39;, loadChildren: &#39;app/demo/demo.module#DemoModule&#39;, data: {preload: true} },
];

export const mainRoutes = RouterModule.forChild(routes);

Öffnen Sie den Browser F12 und überprüfen Sie das Laden von js. Sie werden feststellen, dass beim Laden der Seite die js anderer Module vorgeladen werden

Offizielle Website Es gibt eine Standardimplementierung von PreloadAllModules. Anweisungen finden Sie auf der offiziellen Website.

Den spezifischen Code finden Sie auf meinem Github, https://github.com/332557712/cc.

Verwandte Empfehlungen:

JS-Vorladetechniken zum Teilen von Video-Audio-/Video-Screenshots

Angular-Implementierung des Vorladeverzögerungsmoduls Beispielfreigabe

Beispiel zum Vorladen von JS-Bildern

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung des Beispiels zum Vorladen der Angular2-Route. 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