angular 2 route to 404 page when route param is invalid

后端 未结 4 1836
闹比i
闹比i 2021-02-14 01:17

Say I have an route with a param like this (in Angular 2): /user1/products/:id, which could have child routes like /user1/products/3/reviews.

W

相关标签:
4条回答
  • 2021-02-14 01:47

    Its really interesting question, perhaps you should report it as feature request. I would be nice to have access to router instruction inside loader callback of RouteDefinition.

    You could try to emulate validation adding default route /** and using regex parameter of RouteDefinition to match only positive numbers.

    0 讨论(0)
  • 2021-02-14 01:51

    Update

    In the new Router V3 you can use guards as explained in https://angular.io/guide/router#canactivate-requiring-authentication

    Original

    I think you should use @CanActivate() to do the check. If you forward in @CanActivate() the invalid URL shouldn't be added to the history (not tried)

    See also https://github.com/angular/angular/issues/4112 for how to use DI in @CanActivate()

    0 讨论(0)
  • 2021-02-14 02:02

    Ok, this is already implemented, just not well-documented.

    According to the docs:
    router.navigateByUrl(url: string, _skipLocationChange?: boolean) : Promise<any>

    Has a parameter _skipLocationChange that will not modify the history.
    These will do the trick:

    router.navigateByUrl('/404', true); router.navigateByInstruction(router.generate(['/404']), true);

    0 讨论(0)
  • 2021-02-14 02:10

    As of Angular 2 final this is the solution:

    this._router.navigateByUrl('/404', { skipLocationChange: true })
    
    0 讨论(0)
提交回复
热议问题