是否有使用ng-toolkit / universal注入本地存储的其他方法?

时间:2019-08-29 10:17:14

标签: angular angular-universal angular8

我正在使用一种服务(身份验证服务)来检查用户是否保存在本地存储中,还是不保存一个新的存储,或者是否已经保存了该用户,现在我想使用Angular Universal进行构建,以便本地存储会导致错误,因此下载了软件包@ng-toolkit/universal,然后像文档一样注入了localstorage,但是它导致使用localstorage的所有功能都抛出并出错

这是针对使用Angular 8,Angular Universal,@ng-toolkit/universal

的新Angular应用程序的
import { LOCAL_STORAGE } from "@ng-toolkit/universal";

@Injectable({
  providedIn: "root"
})
export class AuthService {
  user: User;
  userLoggedIn = new Subject();

  constructor(
    private _http: HttpClientService,
    @Inject(LOCAL_STORAGE) public localStorage
  ) {}
  get isLogin() {
    if (localStorage.getItem("user")) {
      this.user = JSON.parse(localStorage.getItem("user"));
      this.userLoggedIn.next();
      return JSON.parse(localStorage.getItem("user"));
    }
  }

  register(body) {
    return this._http.post(body, "user/register");
  }
  login(body) {
    return this._http.post(body, "user/login");
  }
  saveUser(user) {
    localStorage.setItem("user", JSON.stringify(user));
    this.user = user;
  }
  updateProfile(body) {
    return this._http.post(body, "auth/applicant/profile/create-general-info");
  }

  get Token() {
    if (localStorage.getItem("user")) {
      try {
        return JSON.parse(localStorage.getItem("user")).token;
      } catch (e) {
        console.log(e);
      }
    }
  }

  // Get User Role
  get Role() {
    if (localStorage.getItem("user")) {
      try {
        return JSON.parse(localStorage.getItem("user")).role.role;
      } catch (e) {
        console.log(e);
      }
    }
  }

  get UserId() {
    if (localStorage.getItem("user")) {
      return JSON.parse(localStorage.getItem("user")).id;
    }
  }
  get User() {
    if (localStorage.getItem("user")) {
      return JSON.parse(localStorage.getItem("user"));
    }
  }

我希望这些功能能够像注入之前一样正常且正确地工作,但是现在它们并不是功能会抛出错误,主要是isLogin和Token

1 个答案:

答案 0 :(得分:0)

答案是否定的。您无法在Angular Universal中使用localStorage。只有特殊的注入才能编译代码。但是localStorage仅存在于用户的浏览器中,而在服务器上不可用。您可以使用isPlatformBrowser来检查localStorage是否可用。 this article

中对此进行了描述