3

这里有一个关于使用 localstorage 和 angular2 的很好的问答。https://stackoverflow.com/a/39098748/6203604

这种方法似乎适用于“npm start”。但是,当您运行“npm run build”时,错误:

出现“typeof ../browser.module”类型时不存在属性“window”。

https://github.com/angular/universal-starter上的“通用陷阱”中,它说

窗口、文档、导航器和其他浏览器类型 - 在服务器上不存在 - 因此使用它们或任何使用它们的库(例如 jQuery)将不起作用。如果您确实需要其中一些功能,您确实有一些选择:如果您需要使用它们,请考虑将它们限制在您的 main.client 中,并使用从 Universal 导入的 isBrowser / isNode 功能根据情况包装它们。从 'angular2-universal' 导入 { isBrowser, isNode }; 另一种选择是使用“@angular/platform-b​​rowser”中的 DOM

isBrowser 包装器或使用平台浏览器是否适合在这里引用 localStorage?如何最好地写这个的任何例子?

例如,在 browser.module.ts 中,是否应该为可分发包包装 window.localStorage?

import {LocalStorage} from './local-storage.ts';

export function ngApp() {
  return bootstrap(App, [
    // ...

    UserService,
    { provide: LocalStorage, useValue: window.localStorage}
  ]);

与“npm run build”可分发包一起使用的东西?

此外,在运行 npm start 时,我收到错误消息:Unexpected token u。 在此处输入图像描述

这似乎来自文件 node.module.ts 中 useValue 中的“u”,因为它消失并被替换为“没有令牌 LocalStorage 的提供者!”

... 
providers: [
    // ...
    UserService,
    {provide: LocalStorage, useValue: {getItem() {} }}
]
...

任何人得到类似的东西。想法?

4

1 回答 1

0

您可以为实际上不访问的服务器使用“假”存储服务window,并在服务器模块使用DI设置它,并window为浏览器模块提供正确的访问权限。一个很好的例子可以在这里找到

于 2017-02-26T09:24:34.173 回答