导航后Angular 2视图无响应

时间:2016-12-29 14:14:02

标签: angular typescript angular2-routing

我有一个使用角度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);
}

不确定是否有角度的错误或我的代码,但我的研究没有给出任何结果。

1 个答案:

答案 0 :(得分:10)

似乎变化检测无法正常工作

您可以使用

手动调用更改检测
constructor(private zone:NgZone) {}

并运行

this.zone.run(() => this._router.navigate(['/signup']));

实际上,我不知道为什么不会自动调用更改检测。
可能是因为router.navigate在错误处理程序中被调用,但我没有看到为什么会导致错误处理的原因。