Jonathan Salomon
1 min readJan 24, 2019

--

I ended up using a different approach which works fine with Angular & RxJS versions 6. I am using the RxJSdelayWhen operator to delay loading the route until I call the triggerDelayedPreloader method from within my post-authentication logic:

import { Injectable } from '@angular/core';
import { PreloadingStrategy, Route } from '@angular/router';
import { Observable, Subject, of } from 'rxjs';
import { catchError, delayWhen, flatMap} from 'rxjs/operators';
@Injectable({
providedIn: 'root'
})
export class AppPreloadStrategyProvider implements PreloadingStrategy {
private delayedPreloader$ = new Subject(); // subject used for triggering delayed module loadingconstructor() {}preload(route: Route, fn: () => Observable<any>): Observable<any> {return route.data && route.data.preload
? of(null).pipe(
delayWhen(() => this.delayedPreloader$.asObservable()),
flatMap(_ => fn().pipe(catchError(() => of (null))))
)
: of(null);
}
public triggerDelayedPreloader() {
this.delayedPreloader$.next();
}
}

--

--