我有一个使用角度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方法:
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);
}
不确定是否有角度的错误或我的代码,但我的研究没有给出任何结果。
答案 0 :(得分:10)
似乎变化检测无法正常工作
您可以使用
手动调用更改检测constructor(private zone:NgZone) {}
并运行
this.zone.run(() => this._router.navigate(['/signup']));
实际上,我不知道为什么不会自动调用更改检测。
可能是因为router.navigate
在错误处理程序中被调用,但我没有看到为什么会导致错误处理的原因。