Я пытаюсь получить некоторые сохраненные данные json из localalstorage с помощью этого кода на Angular 8:
getState(key: string) {
return this.state$.pipe(map(obj => obj[key]));
}
, но когда я делаю это:
console.log(this.appState.getState('state1'));
Не возвращаетсяданные проанализированы.
Но когда я делаю это:
var result = JSON.parse(localStorage.getItem('state1'));
Возвращает результат, который я хотел.
Мой вопрос:
Как можноЯ изменяю этот метод:
getState(key: string) {
return this.state$.pipe(map(obj => obj[key]));
}
... так, чтобы он возвращал результаты как JSON.parse?
Вот весь код сервиса:
import { Injectable } from '@angular/core';
import { BehaviorSubject } from 'rxjs';
import { map } from 'rxjs/operators';
@Injectable({
providedIn: 'root'
})
export class AppStateService {
private appState = {};
private state$;
constructor() {
this.state$ = new BehaviorSubject(this.appState);
}
initState() {
Object.keys(localStorage).forEach(key => {
if (localStorage[key][0] === '{') { this.appState[key] = JSON.parse(localStorage[key]);
} else {
this.appState[key] = localStorage[key];
}
});
this.state$.next(this.appState);
}
setState(key: string, value: any, persist: boolean = false) {
this.appState[key] = value;
this.state$.next(this.appState);
if (persist) {
if (typeof value === 'object') { localStorage[key] = JSON.stringify(value);
} else {
localStorage[key] = value;
}
}
}
getState(key: string) {
return this.state$.pipe(map(obj => obj[key]));
}
}