import {Injectable} from '@angular/core'; import {ActivatedRouteSnapshot, Resolve, RouterStateSnapshot} from '@angular/router'; import {Observable} from 'rxjs'; import {AppState, selectLoadedAssets} from './store/app.reducer'; import {select, Store} from '@ngrx/store'; import {take} from 'rxjs/operators'; import {loadAssets} from './store/app.actions'; @Injectable({ providedIn: 'root' }) export class AssetsResolver implements Resolve<any> { loadedAssets$ = this.store.pipe(select(selectLoadedAssets)); constructor( public store: Store<AppState> ) {} resolve( route: ActivatedRouteSnapshot, state: RouterStateSnapshot ): Observable<any>|Promise<any>|any { this.store.dispatch(loadAssets()); return this.loadedAssets$.pipe(take(1)); } }