【问题标题】:Can not use router.navigate inside setTimeout method in angular 2 [duplicate]无法在角度 2 的 setTimeout 方法中使用 router.navigate [重复]
【发布时间】:2018-04-22 09:59:41
【问题描述】:

如果用户使用 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(){} 和箭头函数之间的区别。但我有点需要解释。在此先感谢

【问题讨论】:

    标签: angular error-handling settimeout router


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2017-02-08
      • 2020-08-04
      • 1970-01-01
      • 2019-10-10
      • 1970-01-01
      • 2017-04-27
      • 2017-08-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多