Platform: How do I subscribe to router state in @ngrx/router-store in a component?

Created on 25 Jul 2017  路  2Comments  路  Source: ngrx/platform

reducer.ts

export interface AppState {
    router: fromRouter.RouterReducerState;
}

export const reducers: ActionReducerMap<AppState> = {
    router: fromRouter.routerReducer
};

export const getRouterState = (state: AppState) => state.router;
export const getCurrentUrl = createSelector(getRouterState, (state: fromRouter.RouterReducerState) => state.state.url);

app.component.ts

constructor(
    private store: Store<fromRoot.AppState>
) {
   store.select(fromRoot.getCurrentUrl).subscribe(url => console.log(url));
}

When I do this, I get an error saying that it cannot read 'state' of undefined.

I tried implementing the solution explained in #151, but it did not work for me either.

Simply returning router state as a whole, and logging it to console shows me an object, but whenever I attempt accessing its properties, they are shown as 'undefined', which is weird because I am able to subscribe or get a value of state using the method shown above.

Most helpful comment

The router state has an initial state of undefined, so you need to protect against that in your selector.

export const getCurrentUrl = createSelector(getRouterState, (state: fromRouter.RouterReducerState) => state.state && state.state.url);

All 2 comments

The router state has an initial state of undefined, so you need to protect against that in your selector.

export const getCurrentUrl = createSelector(getRouterState, (state: fromRouter.RouterReducerState) => state.state && state.state.url);

Hi, How i can unsubscribe ngrx router selector

Was this page helpful?
0 / 5 - 0 ratings