未定义Angular Universal sessionStorage

时间:2018-12-11 15:06:57

标签: angular angular-universal

我已将应用程序从Angular 6移至Angular Universal,并且自从这样做以来,我在控制台中注意到了此错误:

  

sessionStorage未定义

对此服务很抱怨:

export class SessionService {
  constructor(
    private key: string
  ) { 
  }

  save(json: any) {
    sessionStorage.setItem(this.key, JSON.stringify(json));
  }

  get() {
    return JSON.parse(sessionStorage.getItem(this.key));
  }

  clear() {
    sessionStorage.clear();
  }
}

我已经看到您可以执行以下操作:

 if (!isPlatformBrowser(this.platformId)) return;

但是此服务实际上是这样扩展的:

import { Injectable } from '@angular/core';

import { SessionService } from './session.service';

@Injectable({
  providedIn: 'root'
})
export class QuestionSessionService extends SessionService {
  constructor() {
    super(
      'questions'
    );
  }
}

所以我无法将@Inject(PLATFORM_ID) private platformId: Object添加到构造函数中。

有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

在sessionService添加中检查您是否在浏览器端

if (!isPlatformBrowser(this.platformId));

如果您在浏览器端,请执行当前操作。但是如果您在SR端,请使用memoryStorage或任何其他无法操作的虚拟注册,它们不会导致此错误。

希望有帮助。