不能在角度 2 中使用 router.navigate 内部 setTimeout 方法



我正在尝试实例化路由器对象,如果用户未经授权,则导航到登录 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;
            }
        }

    }

网络上有很多关于这个主题的令人困惑的信息。我知道这是函数(){}和箭头函数之间的区别。但我有点需要一个解释。提前致谢

我相信

你有一个引用错误。如果要使用第二种方法,则必须将"this"绑定到方法调用,否则这是指setTimeout。

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

最新更新