angular 2 경로 사전 로드 정책
길 을 게 으 르 게 불 러 오지 않 았 을 때 처음 사용 할 때 불 러 오 는 것 이 매우 느 려 서 사용자 체험 에 영향 을 줍 니 다.angular 2 는 loadChildren 을 사용 하여 게 으 르 게 불 러 올 수 있 습 니 다.처음 사용 할 때 필요 한 모듈 만 불 러 옵 니 다.다른 모듈 은 실제로 사용 할 때 만 불 러 옵 니 다.이때 브 라 우 저 콘 솔 을 열 어 js 불 러 오 는 것 을 볼 때사용 할 때 해당 하 는 js 를 불 러 오고 해당 모듈 의 기능 을 처음 클릭 할 때 멈 추 는 것 을 발견 할 수 있 습 니 다.나중에 사용 하면 안 됩 니 다.그러면 사용자 체험 이 좋 지 않 습 니 다.다음 에 미리 불 러 오기 전략 을 사용 하면 이 문 제 를 해결 할 수 있 습 니 다.
2.미리 불 러 오기 정책
RouterModule.forRoot 의 두 번 째 설정 옵션 이 추가 되 었 습 니 다.이 설정 옵션 중 하 나 는 preloading Strategy 설정 입 니 다.물론 다른 설정 도 있 습 니 다.여 기 는 preloading Strategy 만 말 합 니 다.이 설정 은 사전 로드 전략 설정 입 니 다.우 리 는 자신의 사전 로드 전략 을 실현 해 야 합 니 다.미리 로드 하지 않 아 도 되 는 장면 에서 우 리 는 설정 하지 않 아 도 됩 니 다.우선 selective-proading-strategy.ts 파일 을 새로 만 듭 니 다.class 를 사용 하여 Preloading Strategy 인 터 페 이 스 를 실현 하 는 preload 방법 입 니 다.코드 는 다음 과 같 습 니 다.
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['preload'] ? load() : Observable.of(null);
}
}
위의 뜻 은 간단 합 니 다.경로 에 data:{preload:true}인 자 를 설정 하면 이 안의 정책 은 load()를 되 돌려 줍 니 다.미리 불 러 올 필요 가 있다 는 뜻 입 니 다.설정 이 없 으 면 미리 불 러 오지 않 아 도 됩 니 다.물론 반대로 불 러 올 수도 있 습 니 다.기본 값 은 미리 불 러 올 필요 가 없 을 때 만 불 러 오지 않 습 니 다.제 github 에 있 는 것 처럼.스스로 유연 하 게 운용 하 다.그 다음 에 경로 에 정책 을 추가 합 니 다.즉,RouterModule.forRoot 의 설정 입 니 다.코드 는 다음 과 같 습 니 다.
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import {SelectivePreloadingStrategy} from "./selective-preloading-strategy";
import { LoginComponent } from './login/login.component';
import { MainComponent } from './main/main.component';
/**
* app
*/
const routes: Routes = [
{ path: '', redirectTo: '/login', pathMatch: 'full' },
{
path: 'login',
component: LoginComponent
},
{
path: 'app',
component: MainComponent,
loadChildren: 'app/main/main.module#MainModule',
data: {preload: true}
}
];
export const appRoutes=RouterModule.forRoot(routes,{preloadingStrategy: SelectivePreloadingStrategy});
AppModule 의 providers 에 추가 해 야 합 니 다.코드 는 다음 과 같 습 니 다.
/**
* 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 {}
다음 경로 에서 사용 합 니 다.코드 는 다음 과 같 습 니 다.
import { NgModule, OnInit } from '@angular/core';
import { RouterModule, Routes, Router } from '@angular/router';
/**
*
*/
const routes: Routes = [
{ path: 'home', loadChildren: 'app/home/home.module#HomeModule', data: {preload: true} },
{ path: 'demo', loadChildren: 'app/demo/demo.module#DemoModule', data: {preload: true} },
];
export const mainRoutes = RouterModule.forChild(routes);
브 라 우 저 F12 를 열 고 js 의 로 딩 을 보면 페이지 로 딩 이 끝나 면 다른 모듈 의 js 를 미리 불 러 옵 니 다.홈 페이지 에 PreloadAllModules 를 기본적으로 구현 하 는 홈 페이지 설명 을 참고 하 세 요.
구체 적 인 코드 는 나의 github 에서 찾 아 라https://github.com/332557712/cc
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Angular에서 타사 스크립트 및 CSS 작업Angular 방식으로 회로도가 있는 외부 라이브러리를 추가하거나 모듈을 가져옵니다. Angular.json은 Angular 프로젝트의 모든 설정 파일이며 표준 JavaScript 및 CSS 파일과 함께 타사 라이브...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.