好吧,我再次遇到更多的角度问题。抱歉(?)
问题是注册后我试图重定向用户,但是由于某种原因,我每次都会遇到下一个错误:
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
) { }
这有什么问题吗?
答案 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
的上下文。