如果在角度上有可能发送404状态错误,那么处理这种类型的情况会更容易。 但是,在角度上,返回404状态错误没有意义,因为在浏览组件时,您实际上并未发出任何http请求。
要解决这个问题,你可以使用Angular resolve到Router Guards找出路由数据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'正确吗?如果是这样,它不能解决问题,我已经有这样的实施... –