Angular 6 - ОШИБКА TypeError: «this.router не определен» - PullRequest
0 голосов
/ 29 августа 2018

Ну, вот я снова с более угловатыми проблемами. Извините (?)

Дело в том, что я пытаюсь перенаправить пользователя после регистрации, но по какой-то причине я получаю следующую ошибку каждый раз:

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 голосов
/ 29 августа 2018

Вам нужно использовать функции стрелок в вашем коде, чтобы иметь возможность использовать this

setTimeout(() => {
    this.router.navigate(['login']);
}, 2000);
0 голосов
/ 29 августа 2018

Я считаю, что проблема в следующем коде:

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

В этом случае, поскольку вы используете анонимную функцию, ключевое слово this является контекстом самой функции. Чтобы это исправить, измените его на:

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

То, как работают функции стрелок, позволит this быть контекстом класса вместо контекста функции.

0 голосов
/ 29 августа 2018

Ваш setTimeout должен использовать функцию стрелки в качестве обратного вызова, чтобы избежать повторного связывания контекста this.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...