localStorage getItem返回null

时间:2019-11-12 03:05:48

标签: angular typescript

登录后从localStorage检索值时遇到麻烦。问题在这里

getOrgId(){ console.log(localStorage.getItem('orgId')) //Give null return localStorage.getItem('orgId') }

它赋予空值,但是当我重新加载页面时,我得到了价值。

身份验证服务

public loginUser(userData: LoginRequest): Observable<LoginResponse> {
  console.log(userData.password)
    return this.http.post<LoginResponse>("api/auth/login", userData,httpOptions)
      .pipe(
        tap( // Log the result or error
          data => {
            if (data.status['message'] === 'Success.') {
              const loginData = {role: data.role, user: data.user, token: data.token,orgId:data.orgId,email:data.email,orgName:data.orgName};
              localStorage.setItem('loginData', JSON.stringify(loginData));
              localStorage.setItem('loginUserId', userData.userId);
              localStorage.setItem('token', JSON.stringify(loginData.token));
              localStorage.setItem('orgId', JSON.stringify(loginData.orgId));
              localStorage.setItem('email', JSON.stringify(loginData.email));
              localStorage.setItem('orgName',JSON.stringify(loginData.orgName));
              localStorage.setItem('role', JSON.stringify(loginData.role));
              console.log("logindata:" +loginData.orgId); //Give Value
              console.log(this.isLoggedIn());
              this.login.next(this.isLoggedIn());
              this.router.navigateByUrl('/dashboard');
            } else {
              localStorage.removeItem('loginData');
              localStorage.removeItem('loginUserId');
              localStorage.removeItem('token');
              localStorage.removeItem('orgId');
              localStorage.removeItem('orgName');
              this.login.next(this.isLoggedIn());
            }
          },
          error => {
            localStorage.removeItem('loginData');
            localStorage.removeItem('loginUserId');
            localStorage.removeItem('token');
            localStorage.removeItem('orgId');
            localStorage.removeItem('orgName');
            this.login.next(this.isLoggedIn());
            console.log(error);
          }
        )
      );
  }

getOrgId(){
    console.log(localStorage.getItem('orgId')) //Give null
    return localStorage.getItem('orgId')
  }

2 个答案:

答案 0 :(得分:0)

我不知道这个答案对您有没有帮助,因为这几个月来,我在角度上也很挣扎。

我看到您需要使用函数从urlocalStorage收集值。也许我的代码可以帮助您:/

||我正在将Java用于Web服务,顺便说一句||

Authentication.service.ts

login(username: string, password: string) {
return this.http.post < any > (this.a.SERVER_URL + '/system/auth/newLogin', { // /authentication/login
// return this.http.post < any > (this.a.SERVER_URL + '/authentication/login', {
    username: username,
    password: password
  })
  .map(user => {
    // login successful if there's a jwt token in the response
    console.log(user);
    if (user && user.d) {
    // if (user && user.token) {
      // store user details and jwt token in local storage to keep user logged in between page refreshes
      localStorage.setItem('username', username);
      localStorage.setItem('entitas_id', user.d.entitas_id);
      localStorage.setItem('role_id', user.d.role_id);
      localStorage.setItem('token', user.d.token);
      localStorage.setItem('active', user.d.active);
      localStorage.setItem('jabatan_id', user.d.jabatan_id);
      localStorage.setItem('currentUser', JSON.stringify(user));
    } else {
      // Gagal Login
      this.options.message = user.m;
      notify(this.options, 'error', 3000);
    }

    return user;
  });

}

某些文件包含我需要从localStorage收集价值的功能

BaruChanged(e){
    console.log(e)
    const jabatan = localStorage.getItem('jabatan_id');
    const entitas_id = localStorage.getItem('entitas_id');
    const username = localStorage.getItem('username').toString().toUpperCase();
    this.role.username=username;
    this.role.entitas_id = entitas_id;
    this.role.jabatan = jabatan;

  }

我正在将localStorage.getItem('jabatan_id')保存到一些const中。这就是我想向您介绍的内容:))

答案 1 :(得分:0)

我认为您可能会在ngOninit()或组件Constructor中调用 getOrgId()函数,这就是为什么它会给出null的原因,因为在本地设置中设置值之前,您正在调用getOrgId()函数。

只需在两个函数 getOrgId() loginUser()中编写一个控制台,检查哪个先打印。