角度6-错误TypeError:“ this.router未定义”

时间:2018-08-29 14:59:10

标签: angular angular6

好吧,我再次遇到更多的角度问题。抱歉(?)

问题是注册后我试图重定向用户,但是由于某种原因,我每次都会遇到下一个错误:

ERROR TypeError: "this.router is undefined"

基本上,我正在处理表单提交(工作正常)的输入,并将其发布到我的Laravel API中,然后使用它,执行注册并返回成功消息。无论哪种方式,我都无法使用下一段代码来重定向用户(使用Angular Router):

onSubmit() {
    this.authService.registerUser(this.user).subscribe(
      response => {
        let data = Object.assign(response.alert, this.denyControllConfig);
        this.sweetAlert(data);
      },
      error => {
        let data = {};
        let errors = error.error.errors;
        for (let key in errors) data[key] = errors[key][0];
        // this.sweetAlert(data);
      }
    );
    setTimeout(function () {
      this.router.navigate(['login']);
    }, 2000);
  }

我已在文件顶部将Rourter导入如下:

import { Router } from "@angular/router";

这是我的类构造函数:

constructor(
    private router: Router,
    private authService: AuthService
  ) { }

这有什么问题吗?

3 个答案:

答案 0 :(得分:2)

您需要在代码中使用箭头功能,才能使用this

setTimeout(() => {
    this.router.navigate(['login']);
}, 2000);

答案 1 :(得分:1)

我相信问题出在以下代码中:

setTimeout(function () {
  this.router.navigate(['login']);
}, 2000);

在这种情况下,由于您正在使用匿名函数,因此this关键字是函数本身的上下文。要解决此问题,请将其更改为:

setTimeout(() => {
   this.router.navigate(['login']);
})

箭头函数的工作方式将使this成为类上下文,而不是函数上下文。

答案 2 :(得分:0)

您的setTimeout必须使用箭头函数作为回调,以避免重新绑定this的上下文。