Angular: перезапустить стратегию предварительной загрузки программно - PullRequest
0 голосов
/ 26 февраля 2020

Предположим, у меня есть следующая конфигурация маршрута:

export const appRoutes: Routes = 
[{ path: '', component: MainComponent, canActivate: [AuthGuard], resolve: {session: SessionResolveGuard}, children: [
    { path: '', component: DashboardComponent},
    // other "normal" paths not relevant now

    { path: 'nst', loadChildren: () => import('./nst/nst.module').then(m => m.NSTModule), data: { preload: true }},
    { path: 'rp', loadChildren: () => import('./rp/rp.module').then(m => m.RPModule), data: { preload: true }},
    { path: 'pf', loadChildren: () => import('./pf/pf.module').then(m => m.PFModule), data: { preload: true }},
]};

@NgModule({
    exports: [RouterModule],
    imports: [RouterModule.forRoot(appRoutes, { preloadingStrategy: EvoPreloadStrategyService })]
})
export class AppRoutesModule { }

мой режим предварительной загрузки довольно прост (вроде псевдокода):

@Injectable()
export class EvoPreloadStrategyService implements PreloadingStrategy {
  constructor(private userSession: UserSessionService) {}

  preload(route: Route, loadModule: () => Observable<any>): Observable<any> {
    // "preload" every module that has a specific property and that is enabled for the user
    if (route.data && route.data['preload'] && userSession.currentSession.shouldLoad[route.path] === true)
      return loadModule();
    else
      return of(null);
  }
}

Свойство userSession.currentSession.shouldLoad зависит от текущее состояние сеанса и содержит все включенные модули для пользователя (например, он может содержать {'pf': true, 'nst': true, 'rp': true}).
Однако свойство имеет значение dynamici c: в каждый момент Новый модуль может быть добавлен для пользователя, даже если это не во время bootstrap приложения.

Исходя из этих соображений, как я могу программно перезапустить стратегию предварительной загрузки (при каждом изменении свойства shouldLoad) в Angular 8?
Возможно ли это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...