我正在尝试实例化一个路由器对象,如果用户在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(){}和箭头函数之间的区别。但我需要一个解释。提前致谢
答案 0 :(得分:1)
我相信你有一个参考错误。 如果你想使用第二种方法,你必须将'this'绑定到方法调用,否则这是指setTimeout。
setTimeout(this.navigateToLogin.bind(this),3000);