导航后Angular 2视图无响应

Ada*_*m S 2 typescript angular2-routing 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); }
        );
}
Run Code Online (Sandbox Code Playgroud)

AuthService .me()方法

me(): any 
{
    return this._appService.get('/me');
}
Run Code Online (Sandbox Code Playgroud)

我的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);
}
Run Code Online (Sandbox Code Playgroud)

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

Gün*_*uer 10

似乎变化检测不起作用

您可以使用手动调用更改检测

constructor(private zone:NgZone) {}
Run Code Online (Sandbox Code Playgroud)

并运行

this.zone.run(() => this._router.navigate(['/signup']));
Run Code Online (Sandbox Code Playgroud)

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