假设我有一个带有这样参数的路由(在 Angular 2 中):/user1/products/:id
,它可能有像 /user1/products/3/这样的子路由评论
。
当我导航到 /user1/products/-1
时,我检查我的服务器,如果该产品不存在,我想在不影响浏览器历史记录的情况下呈现 404 页面。
使用 router.navigate(['/404'])
或 router.navigateByUrl('/404')
似乎不起作用,因为它同时添加了 /user1/products/-1
和/404
到浏览器历史记录。
意思是当我在浏览器中按下后退按钮时,我回到/user1/products/-1
,它立即被重定向到/404
并且我基本上停留在 /404
。
在 ExpressJS 中,我们会做类似 next()
的事情来将请求传递给我们的 404 处理程序。 Angular 2 中是否有等效的客户端?
最佳答案
更新
在新的 Router V3 中,您可以使用守卫,如 https://angular.io/guide/router#canactivate-requiring-authentication 中所述。
原创
我认为你应该使用 @CanActivate()做检查。如果您在 @CanActivate()
中转发,则不应将无效 URL 添加到历史记录中(未尝试)
另见 https://github.com/angular/angular/issues/4112了解如何在 @CanActivate()
关于angular-ui-router - 当路由参数无效时, Angular 2 路由到 404 页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36599523/