lazyloaded 모듈을 미리로드하는 PreloadingStrategy
을 사용하면 응용 프로그램이 더 이상 인증되지 않으면 라우트 변경시 특정 모듈을 가져올 필요가 없으므로이를 방지 할 수 있습니다.
프리로드 - strategy.ts
import { PreloadingStrategy, Route } from '@angular/router';
import { Observable } from 'rxjs/Observable';
import { of } from 'rxjs/observable/of';
export class PreloadSelectedModulesList implements PreloadingStrategy {
preload(route: Route, load: Function): Observable<any> {
return route.data && route.data['preload'] ? load() : of(null);
}
}
앱 routing.module.ts (요 파파 repo link에서 촬영)
import { PreloadSelectedModulesList } from './core/preload-strategy';
const routes: Routes = [
// Eagerly loaded
{ path: '', component: HomeComponent, pathMatch: 'full' },
// Preloaded module
{ path: 'preloaded', loadChildren: './preloaded/preloaded.module#PreloadModule', data: {preload: true}},
// Lazy loaded module
{ path: 'lazy', loadChildren: './lazy/lazy.module#LazyModule'}
];
@NgModule({
imports: [
RouterModule.forRoot(routes, {
preloadingStrategy: PreloadSelectedModulesList
})
],
exports: [RouterModule],
providers: [ PreloadSelectedModulesList, ..., ... ]
})
export class AppRoutingModule { }
여전히 위치를 사용자가 갑자기 작은 에지 경우가있을 수 있습니다 모듈을 얻으려고 시도하는 중에 권한이 없어진 경우이 경우 Abris 위에 언급 된대로 Angulars ErrorHandler
을 확장하고 모듈로드에 발생하는 오류를 확인할 수 있습니다.
오류 handler.ts
import { ErrorHandler } from '@angular/core';
export default class MyErrorHandler extends ErrorHandler {
constructor() {
super();
}
handleError(error) {
// Check and take appropriate actions
...
// delegate to the default handler
super.handleError(error);
}
}
는 리디렉션 감시 함께 할 수 있나요? 이 경우에는 인증이 실패 할 경우에 대비하여 이벤트를 트리거 할 수 있다고 생각하고 AppComponent에서이를 표시합니다. – David
아니요, 리디렉션은 index.html 파일을로드 할 때 서버 측에서 수행됩니다. 401에서 XHR 요청을 받으면 코드에서 리다이렉션을 수행하지만 정적 리소스에서 401을 가로채는 방법을 모릅니다. – Abris
이것에 대한 모든 진전이 있습니까? 나는 똑같은 시나리오에 갇혀있다. – petur