Как в Angular сделать умный lazy loading модулей после перехода на определённый роут либо по значениям?

Как можно реализовать подгрузку модуля в Angular только если пользователь перешёл на определённый роут либо при возникновении определённого события ?
И можно ли прописать как-то в роуте, что б предзагрузка шла, например только, если есть определённый критерий, скажем, человек- админ, либо ещё что-то?

Я сейчас сделал что-то типа такого и хочу апгрейдить роутинг. routes

{
    path: 'import-catalog',
    loadChildren: () => import('./pages/import-catalog/import-catalog.module').then(mod => mod.ImportCatalogModule),
    data: {preload: true, preloadAfter: 700},
    canActivate: [AuthGuard]
  }

в app.module добавляю ссылку на сервис прелоадинга

imports: [
    RouterModule.forRoot(routes, {
    preloadingStrategy: CustomPreloadingStrategyService,......

и сам сервис

import {Injectable} from '@angular/core';
import {PreloadingStrategy, Route} from '@angular/router';
import {Observable, of, timer} from 'rxjs';
import {map} from 'rxjs/operators';

@Injectable({
  providedIn: 'root'
})
export class CustomPreloadingStrategyService implements PreloadingStrategy {
preload(route: Route, fn: () => Observable<any>): Observable<any> {
    const loadRoute = (delay) => delay > 0 ? timer(delay).pipe(map(() => fn())) : fn();
    if (route.data && route.data.preload) {
      const delay = route.data.preloadAfter ? route.data.preloadAfter : 0;
      return loadRoute(delay);
    }
    return of(null);
  }
}

Таким образом у меня грузятся модуля через указанные миллисекунды, но я бы хотел ещё критерии - грузить только, если типа myValue=isAdmin, а так же - грузить через определённые миллисекунды только если человек перешёл на определённый роут, а иначе не грузить.

Может это "извращение", но для навыком и для оптимизации хотелось бы.
Кто-то делал такое?
  • Вопрос задан
  • 93 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы