角度:TypeError:无法读取未定义的属性“ toLowerCase”

时间:2020-03-12 15:28:19

标签: angular typescript

我的问题是,当我使用http.post方法时,它给我一个错误“ TypeError:无法读取未定义的属性'toLowerCase'”。问题是什么?我尝试将Angular降级为8.0.0版,但是它不起作用。

我的登录服务:

login(model: any)
 {
    return this.http.post(this.baseUrl, model)
    .pipe(map((response: any) => {
      const user = response;
      if(user){
        localStorage.setItem('token', user);
      }
    }));
 }

我在组件中的登录方法:

login(){
    this.authService.login(this.model)
        .subscribe(next =>{
          console.log('You have been logged in');
        },err => {
          console.log(err);
        });
  }

1 个答案:

答案 0 :(得分:1)

我认为您的问题与baseUrl声明有关。您可能正在定义它,而不是设置值,而是设置类型。请记住,:设置了一个类型,=设置了一个值,您可能知道这一点,但我将其保留以备将来参考。因此,您的代码中可能包含以下内容:

  private baseUrl: 'http://localhost:3000/'; 

如果我使用console.log baseUrl's类型,那么我当然是不确定的:

 console.log(typeof this.usersUrl);
 // returns undefined

如果我用console.log baseUrl来获取它的值,我们将再次无法定义:

 console.log(this.usersUrl);
 // returns undefined

检查this示例。

在这种情况下,只需修正baseUrl的声明并将字符串设置为值:

  private baseUrl: string = 'http://localhost:3000/'; 

关于错误为何指向小写方法的一些见解

您收到TypeError: Cannot read property 'toLowerCase' of undefined"错误,因为angular尝试使用本机方法toLowercase将字符串baseUrl转换为所有小写字母(以防万一),并且实际上未在您的代码正确,未定义baseUrl或字符串,因此引发了错误。