在angular 2中的setTimeout方法中不能使用router.navigate

时间:2017-11-09 12:01:52

标签: angular error-handling settimeout router

我正在尝试实例化一个路由器对象,如果用户在setTimeout中未经授权,则导航到登录。问题是当我使用下面的代码系统时。

setTimeout(()=>this.router.navigate(['/login']),3000);

但是当我将这一行改为

setTimeout(this.navigateToLogin,3000);

并添加

navigateToLogin(){
    console.log("i am in navigate");
    this.router.navigate(['/login']);
}

我得到以下错误。我有点困惑。任何帮助将不胜感激..

TypeError: Cannot read property 'navigate' of undefined

全局错误处理程序

handleError(error){

        console.log(error);
        this.router = this.injector.get(Router)
        switch(error.status){
            case ErrorCodes.UNAUTHORIZED_USER:{
                this._msgService.emitGlobalMessage(new EGlobalModal("Error","Unauthorized User, You will be directed in 3 seconds",false,"red"));
                //setTimeout(()=>this.router.navigate(['/login']),3000);
                setTimeout(this.navigateToLogin,3000);
                break;
            }
            default:{
                this._msgService.emitGlobalMessage(new EGlobalModal("Error",error,false,"red"));
                break;
            }

        }


    }

网上有很多令人困惑的信息。我理解它是function(){}和箭头函数之间的区别。但我需要一个解释。提前致谢

1 个答案:

答案 0 :(得分:1)

我相信你有一个参考错误。 如果你想使用第二种方法,你必须将'this'绑定到方法调用,否则这是指setTimeout。

setTimeout(this.navigateToLogin.bind(this),3000);