我已将应用程序从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
添加到构造函数中。
有人可以帮我解决这个问题吗?
答案 0 :(得分:0)
在sessionService添加中检查您是否在浏览器端
if (!isPlatformBrowser(this.platformId));
如果您在浏览器端,请执行当前操作。但是如果您在SR端,请使用memoryStorage或任何其他无法操作的虚拟注册,它们不会导致此错误。
希望有帮助。