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
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.
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()
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);
As of Angular 2 final this is the solution:
this._router.navigateByUrl('/404', { skipLocationChange: true })