在 Angular 应用开发中,我们在 TypeScript 代码里调用 localStorage.
它通过 key 从 local storage 中检索数据。 但是在服务器上,此代码崩溃并显示错误消息: ReferenceError: localStorage is undefined
在服务器上运行 Angular 应用程序时,全局空间中缺少标准浏览器 API.
例如,在服务器端渲染模式下,开发人员不能像在客户端渲染环境下那样,直接访问全局文档对象。 要获得对文档的引用,必须使用 DOCUMENT 令牌和 Angular 依赖注入机制 DI.
不要通过全局空间使用浏览器 API,而是通过 DI 来替换或禁用浏览器实现,以便在服务器上安全使用这些 API.
参考下面的代码:
import {Component, Inject, NgModule} from '@angular/core';
import {LOCAL_STORAGE} from '@ng-web-apis/common';
@Component({...})
export class SomeComponent {constructor(@Inject(LOCAL_STORAGE) localStorage: Storage) {localStorage.getItem('key');}
}
上面的示例使用来自 @ng-web-apis/common 包的 LOCAL_STORAGE 令牌。 但是当我们在服务器上运行这段代码时,我们会得到一个错误。 只需从 AppServerModule 的 providers 中添加来自 @ng-web-apis/universal 包的 UNIVERSAL_LOCAL_STORAGE,并通过令牌 LOCAL_STORAGE,这样就