我在Angular2中使用一个服务,向RESTful API服务器发出HTTP请求。我需要捕获401错误并将用户重定向到/ login页面。由于某种原因,router.nagivate([' / login'])没有在下面的代码中执行。请注意,我已按照此回答Angular 2 redirect in http/rxjs catch callback causes TypeError: Cannot read property 'subscribe' of undefined中的说明操作,但我的代码没有重定向。
search(term: string): Observable<[]> {
return this.http
.get(this.userListUrl+'User?name='+term')
.map((r: Response) => r.json())
.catch(this.handleError);
}
private handleError(error: any): Observable<any>{
if(error.status == 401) {
console.error('An error occurred', error.status);
this.router.navigate(['/login']);
return Observable.of([]);
} else {
let errMsg = error.statusText || 'Server error';
console.error(errMsg); // log to console instead
return Observable.throw(errMsg);
}}
constructor(private http: Http, private router:Router) {}
编辑:更新了handlerError代码。
答案 0 :(得分:0)
在ui-router-ng2(import { UIRouter } from 'ui-router-ng2';
)中,您可以通过注入路由器以编程方式进行导航:UIRouter并调用the go method: router.stateService.go('somestate')
<强>为例强>:
在app.routing.ts
:
export const ROUTES: any = [
{url: '/login', name: 'Login', component: LoginComponent}
]
然后你的功能应该是:
if(error.status == 401) {
this.router.stateService.go('Login');
}
router
private router: UIRouter;
在Constructor
。