我的 Angular 项目中有一个登录组件,我想在用户登录系统时通过 localStorageService 保存用户 ID。
我的登录组件:
login(){
if(this.loginForm.valid){
let loginModel = Object.assign({},this.loginForm.value)
this.authService.login(loginModel).subscribe(response=>{
this.toastrService.success(response.message)
this.getUser(loginModel.email);
this.localStorageService.addToken(response.data)
this.router.navigate([""])
},responseError=>{
console.log(responseError)
this.toastrService.error(responseError.error)
})
}
}
和 LocalStorageService:
addCurrentUserId(user:User){
localStorage.setItem("currentUserId",user.id.toString());
}
当用户登录系统并单击 F12 时,出现此错误:
core.js:6456 ERROR TypeError: Cannot read property 'toString' of undefined
at LocalStorageServiceService.addCurrentUserId (local-storage-service.service.ts:43)
答案 0 :(得分:2)
有些错误或者经常很明显! :p
就您而言,问题的答案就在您的鼻子下方:
Cannot read property 'toString' of undefined
local-storage-service.service.ts:43
您正在代码的第 43 行调用 user.id.toString()
并且错误告诉您您正在执行的代码正在尝试调用 .toString()
……嗯……一些未定义的东西,并且那个东西是你的user.id
!
在 .toString()
调用之前,您的代码中可能发生了您不希望发生的其他事情。
在任何情况下,您还可以通过简单地使用 if 语句来检查用户 ID 是否定义,或者更好的是,您可以使用所谓的 optional chaining。这意味着您的代码将如下所示:user.id?.toString()
。如果未定义用户 ID (undefined
),则不会调用 .toString()
,并且将在您的 undefined
调用中使用 setItem(...)
值。
另外,你真的需要调用 .toString()
吗?