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

标签 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(){} 和箭头函数之间的区别。但我有点需要解释。提前致谢

最佳答案

我相信你有引用错误。 如果您想使用第二种方法,则必须将“this”绑定(bind)到方法调用,否则 this 指的是 setTimeout。

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

关于angular - 不能在 Angular 2 的 setTimeout 方法中使用 router.navigate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47201328/

相关文章:

Angular Material Date Validator 获取无效值

来自动态加载组件的父级的 angular2 typescript 调用方法

ruby-on-rails - 如何处理ActiveRecord::RecordNotUnique error

c# - 获取堆栈跟踪中的参数值

javascript - setTimeout 动态延迟

javascript - 是什么原因导致setTimeout中code和fnc的差异

javascript - 在 forEach 中创建子级

angular - 什么 Typescript 类型是更改事件? ( Angular )

asp.net - 同时使用ELMAH和Application_Error

javascript - setTimeout 方法 :displaying alerts in two different time intervals