Angular 角度4:未找到处理ID
在Angular中,我了解如何使用通配符路由来显示自定义404页面。但是,这仅适用于不存在组件的情况 如果用户访问了一个现有组件,但传递了一个不存在的ID,那么情况会怎样 例如,数据库中不存在Angular 角度4:未找到处理ID,angular,http-status-code-404,url-routing,Angular,Http Status Code 404,Url Routing,在Angular中,我了解如何使用通配符路由来显示自定义404页面。但是,这仅适用于不存在组件的情况 如果用户访问了一个现有组件,但传递了一个不存在的ID,那么情况会怎样 例如,数据库中不存在/widgets/12345,其中12345。 在这种情况下,展示404的最佳实践是什么 通过捕获错误,我成功地将用户重定向到404页面。但这似乎并不正确:您通常不会被重定向到404,您希望停留在同一个URL上,而是使用404页面。如果在angular中可以发送404状态错误,那么处理这种情况会更容易。 但
/widgets/12345
,其中12345
。
在这种情况下,展示404的最佳实践是什么
通过捕获错误,我成功地将用户重定向到404页面。但这似乎并不正确:您通常不会被重定向到404,您希望停留在同一个URL上,而是使用404页面。如果在angular中可以发送404状态错误,那么处理这种情况会更容易。
但是,在angular中,没有必要返回404状态错误,因为在angular中,您在浏览组件时实际上没有发出任何http请求 要解决此问题,可以使用查找路由数据id是否存在。如果它不存在,则重定向到您的404页面
@Injectable()
export class checkIdExistence implements CanActivate {
constructor(private router: Router,
private route: ActivatedRoute,
private yourService: YourService) {
}
canActivate(route: ActivatedRouteSnapshot, routerState: RouterStateSnapshot)
{
return this.route.params
.mergeMap(
(params: Params) => {
const newId = params['id'] ? +params['id'] : '';
return this.yourService.checkExistence(newId)
.map((myInstance: any) => {
if (myInstance && myInstance.id ) {
return true;
}
this.router.navigate(['/404-url']);
return false;
})
.catch(() => Observable.of(false));
});
}
}
“在浏览组件时,您实际上没有发出任何http请求”-我不确定我是否明白这一点。我将转到
/widgets/12345
,它将触发我的服务,它将触发对我的服务器API的HTTP请求,并返回404错误。您的代码包括this.router.navigate(['/404 url'])
,表示您正在手动重定向到404页面,表示URL栏将更改为/404 URL
正确吗?如果是这样,这并不能解决问题,我已经有了这样一个实现。。。