0

我有一个在我的应用程序中使用的函数,该函数的参数之一是一个对象:

const checkValues = {
  promoId: ...,
  ...
  unsaved: !JSON.parse(localStorage.getItem('unsaved')) ? [] : JSON.parse(localStorage.getItem('unsaved'))
}

但是,我在提供项目时收到的唯一错误是:

ReferenceError:localStorage 未在 Object 中定义。(/home/meow/Development/dmc/cli_universal/dist/server.bundle.js:4145:23) 在webpack_require (/home/meow/Development/dmc/cli_universal/dist/server.bundle.js:21:30)在对象。(/home/meow/Development/dmc/cli_universal/dist/server.bundle.js:4119:67) 在webpack_require (/home/meow/Development/dmc/cli_universal/dist/server.bundle.js:21:30)在对象。(/home/meow/Development/dmc/cli_universal/dist/server.bundle.js:1728:69) 在webpack_require (/home/meow/Development/dmc/cli_universal/dist/server.bundle.js:21:30)在对象。(/home/meow/Development/dmc/cli_universal/dist/server.bundle.js:1803:70) 在webpack_require(/home/meow/Development/dmc/cli_universal/dist/server.bundle.js:21:30)在对象。(/home/meow/Development/dmc/cli_universal/dist/server.bundle.js:1509:79) 在webpack_require (/home/meow/Development/dmc/cli_universal/dist/server.bundle.js:21:30)

如何检查 localStorage 是否存在?

4

3 回答 3

5

localstorage 是一个浏览器组件,您尝试在服务器端使用它,您必须确保仅在浏览器端调用 localstorage。

为此,您可以使用角度 isPlatformBrowser 模块。

例子

import { isPlatformBrowser } from '@angular/common';  
constructor(@Inject(PLATFORM_ID) private platformId: any) {}
ngOnInit() {
  if (isPlatformBrowser(this.platformId)) {
    this.id = localStorage.getItem('id');
  } 
}
于 2018-05-01T10:24:09.880 回答
1

如果您查看Universal Starter的文档,您将看到以下部分(作为 Gotcha 的一部分):

窗口、文档、导航器和其他浏览器类型 - 在服务器上不存在 - 因此使用它们或任何使用它们的库(例如 jQuery)将不起作用。

我想这就是您收到此错误的原因。

于 2016-12-09T07:19:25.280 回答
-2

$scope.$watch 应该可以解决您的问题,理想情况下,当您尝试调用 scop 之外的函数时,您需要添加 $watch 以使其呈现在上面。

于 2016-12-09T07:39:53.190 回答