Как можно реализовать подгрузку модуля в 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, а так же - грузить через определённые миллисекунды только если человек перешёл на определённый роут, а иначе не грузить.
Может это "извращение", но для навыком и для оптимизации хотелось бы.
Кто-то делал такое?