【发布时间】:2017-05-13 21:07:35
【问题描述】:
我有一个使用 angular 2 的 api 驱动应用程序。我创建了一个扩展 angular2-sails 的全局服务,如果对呼叫的响应是 401 PLEASE_LOGIN,则将用户重定向到注册组件。
问题是当我重定向到注册组件时,视图(正确加载)不响应用户操作。没有错误,组件方法正在调用并在我单击按钮时工作,但视图只是没有反应或更新。
我的设置如下:我的主组件模板引用了 user-sidebar.component。这个侧边栏组件有一个 ngOnInit 方法,它向后端询问经过身份验证的用户。当没有经过身份验证的用户时,加载它的服务重定向到 /signup
我的 user-sidebar.component ngOnInit 方法:
ngOnInit(): void
{
this._authService
.me()
.subscribe(
(resData: Object) => { this.user = resData.data; },
(err: any) => { console.log(err); }
);
}
AuthService .me() 方法
me(): any
{
return this._appService.get('/me');
}
我的 app.service 获取方法:
get(path: string, data: Object): Observable
{
return this._sailsService.get(path, data)
.catch(this.handleError.bind(this));
}
public handleError(err: Response): void
{
// If the server response with unhautorized, redirect to login / signup page
if(err.statusCode == 401 && err.error == 'PLEASE_LOGIN')
{
this._router.navigate(['/signup']);
}
return Observable.throw(err);
}
不确定是角度错误还是我的代码,但我的研究没有给出任何结果。
【问题讨论】:
-
如果你返回
Observable.of(null)而不是Observable.of(err)会发生什么? -
订阅 onError 回调接收 null 而不是错误。但是对于我目前的问题,它并没有改变任何东西。
-
好的,之前没有完全理解你的代码。您可以尝试注入
private zone:NgZone并运行this.zone.run(() => this._router.navigate(['/signup']));以确保问题与未发生的更改检测无关。 -
当你解决你的问题而不了解你在做什么时的悲伤...... 开个玩笑,它奏效了,谢谢伙计。你能发布一个答案,解释一下解决方案,以便我接受吗?
标签: angular typescript angular2-routing