Здесь есть хороший вопрос и ответ по использованию localstorage и angular2. https://stackoverflow.com/a/39098748/6203604
Этот подход, похоже, отлично работает с «запуском npm». Однако при запуске «npm run build» возникает ошибка:
Свойство 'window' не существует для типа 'typeof ../browser.module'.
В 'Universal Gotchas' на https://github.com/angular/universal-starter это говорит
окна, документы, навигаторы и другие типы браузеров — не существуют на сервере — поэтому их использование или любая библиотека, которая их использует (например, jQuery), не будет работать. У вас есть несколько вариантов, если вам действительно нужны некоторые из этих функций: если вам нужно их использовать, подумайте о том, чтобы ограничить их только вашим main.client и ситуативно обернуть их импортированными функциями isBrowser / isNode из Universal. импортировать {isBrowser, isNode} из 'angular2-universal'; Другой вариант — использовать DOM из «@angular/platform-browser».
Подойдет ли здесь оболочка 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 я получаю сообщение об ошибке: Неожиданный токен u.
Похоже, что это происходит от «u» в useValue в файле node.module.ts, поскольку он исчезает и заменяется на «Нет поставщика для Token LocalStorage!»
...
providers: [
// ...
UserService,
{provide: LocalStorage, useValue: {getItem() {} }}
]
...
У кого есть что-то подобное. Идеи?