На самом деле я нашел ответ:
1 - Добавьте routerReducer к вашему интерфейсу состояния:
export interface State {
...
routerReducer: fromRouter.RouterReducerState<RouterStateUrl>;
}
2 - Init routerReducer в объекте редукторов:
export interface State {
...
routerReducer: fromRouter.RouterReducerState<RouterStateUrl>;
}
3 - Создать интерфейс RouterSatetUrl:
export interface RouterStateUrl {
url: string;
params: Params;
queryParams: Params;
}
4 - Создать CustomSerializer:
@Injectable()
export class CustomSerializer implements fromRouter.RouterStateSerializer<RouterStateUrl> {
serialize(routerState: RouterStateSnapshot): RouterStateUrl {
const {url} = routerState;
const {queryParams} = routerState.root;
let state: ActivatedRouteSnapshot = routerState.root;
while (state.firstChild) {
state = state.firstChild;
}
const {params} = state;
return {url, params, queryParams};
}
}
5 - Создать FeatureSelector, чтобы получить текущий маршрут в любое время:
export const getRouterState = createFeatureSelector<fromRouter.RouterReducerState<RouterStateUrl>>('routerReducer');
6- И последний шаг - использовать getRouterState , где вы хотите получить информацию о маршруте. Например, я использую его в одном из моих эффектов:
@Effect({dispatch: false})
public userLoginDataSuccess$: Observable<Action> = this.actions$.pipe(
ofType(userActions.GET_USER_DATA_SUCCESS),
map((action: userActions.GetUserDataSuccessAction) => action),
tap(() => {
let getRouterState$ = this.store.select(fromRoot.getRouterState).subscribe((data) => {
if (!data.state || data.state.url.includes('login') || data.state.url == '/' || data.state.url == '') {
this.router.navigate([RouteMap.DASHBOARD])
} else {
this.router.navigate([data.state.url])
}
});
getRouterState$.unsubscribe();
})
);