Skip to content

When navigating by UPDATE_LOCATION guards are ignored #99

@Swabo

Description

@Swabo

This is a...

  • feature request
  • bug report
  • usage question

What toolchain are you using for transpilation/bundling?

  • @angular/cli
  • Custom @ngTools/webpack
  • Raw ngc
  • SystemJS
  • Rollup
  • Other

Environment

NodeJS Version: 10.16.0
Typescript Version: 3.2.4
Angular Version: 7.2.1
@angular-redux/store version: 10.0.0
@angular/cli version: (if applicable): 7.2.2
OS: Win 10 x64

Link to repo showing the issus

example-app

Expected Behaviour:

When I navigate by dispatching the UPDATE_LOCATION - Action the router-State should only change if the navigation succeeds. If the navigation is canceled, e.g. by a guard, the current router-State should not update to the intented target location.

Actual Behaviour:

When I navigate by dispatching the UPDATE_LOCATION - Action the router-State is updated to the target location, whether the target is reached or not. This leads to an inconsistent state.

Stack Trace/Error Message:

Additional Notes:

The behaviour can be easily reproduced in the example-app:

  1. Create an Action that navigates the user to /lions:
  @dispatch()
  goToLions() {
    return {
      type: UPDATE_LOCATION,
      payload: '/lions'
    }
  }
  1. Protect the lions-Route with a guard:
{ path: 'lions', component: LionPageComponent, canActivate: [LionsGuard] },

...

export class LionsGuard implements CanActivate {

  canActivate(): any {

    console.warn('hit guard');
    return false;
  }

}
  1. Running goToLions() will update the router-State to /lions, even if the guard keeps me on /elephants

I navigate a lot by returning the UPDATE_LOCATION Action in Epics. Any ideas how to fix or workaround this behaviour?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions