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