2016-12-18 2 views
0

Я объясню вам мои (вероятно, мало) проблемы :)Angular2 местный Предмет хранения()

Я пытаюсь сделать LocalStorage, какой набор и получить некоторые данные (массив объектов). У меня есть один компонент, который добавляет объект в мой локальный массив хранения и еще один, который получает эти данные.

Я на ionic2 вкладке приложении, и когда я могу установить локальное хранилище, другой мой взгляд, где я получаю это это не обновляет ...

Я думаю, что я должен использовать RxJs Subject, но я не» Не знаю, как это сделать правильно.

Посмотрите на мой текущий код

// LocalStorageService.ts 

export class LocalStorageService { 
    public bookmarks: Subject<any> = new Subject() 

    constructor (public alertCtrl: AlertController) {} 


    setUserBookmarks(bookmarks: any) { 
    localStorage.setItem("myData", JSON.stringify(bookmarks)); 
    this.bookmarks.next(bookmarks) 
    } 

    getUserBookmarks() { 
    return JSON.parse(localStorage.getItem("myData")) 
    } 

Тогда мои компоненты

// Component where I set data 

export class ListEventsComponent { 

bookmarks: any 

constructor(private navParams: NavParams, 
private localStorageService: LocalStorageService) {} 

ngOnInit() { 
    this.localStorageService.bookmarks.subscribe(bookmarks => { 
    this.bookmarks = bookmarks 
    }) 
} 


bookmark(event) { 
    this.localStorageService.setUserBookmarks(event) 
} 
} 

и последние:

// Component where I get data 

export class AboutPage { 
public bookmarks: any 

constructor(public navCtrl: NavController, private localStorageService:LocalStorageService) { 
    this.localStorageService.bookmarks.subscribe(bookmarks => { 
    this.bookmarks = bookmarks 
    console.log(bookmarks) 
    }) 
} 

removeBookmark(eventID: string) { 
    this.localStorageService.removeUserBookmark(this.bookmarks, eventID) 
} 
} 

Итак, как я могу обновить свой второй компонент когда Я установил в первом? Заранее благодарю, если я не понимаю, не стесняйтесь сказать это :)

ответ

0

Проблема в том, что ваш второй компонент подписывается после первого вызова следующего, поэтому он не получает никаких данных. Для этого случая вы должны использовать BehaviorSubject для получения последнего испускаемого значения:

public bookmarks: BehaviorSubject<any> = new BehaviorSubject([]); // The initial value 
+0

О да! Работает ! Спасибо @FunStuff :) – ValSouche

+0

Ваше приветствие :) не забудьте принять ответ, пожалуйста. – Bazinga

Смежные вопросы