localStorage未定义 - 使用angular universal,我有一个使用localStorage的函数

时间:2016-12-09 07:14:52

标签: javascript node.js html5 angular angular-universal

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

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

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

  

ReferenceError:未定义localStorage       在对象。 (/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是否存在?

3 个答案:

答案 0 :(得分:1)

如果您查看Universal Starter的文档,请参阅以下部分(作为问题的一部分):

  

窗口,文档,导航器和其他浏览器类型 - 不存在   服务器 - 所以使用它们,或任何使用它们的库(jQuery for   例子)不起作用。

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

答案 1 :(得分:0)

localstorage是一个浏览器组件,你试图在服务器端使用它,当你只在浏览器端时,你必须确保你正在调用localstorage。

为此你可以使用angular isPlatformBrowser模块。

例如

import { isPlatformBrowser } from '@angular/common';  
constructor(@Inject(PLATFORM_ID) private platformId: any) {}
ngOnInit() {
  if (isPlatformBrowser(this.platformId)) {
    this.id = localStorage.getItem('id');
  } 
}

答案 2 :(得分:-1)

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