Angular2本地存储主题()

时间:2016-12-18 16:01:56

标签: angular typescript rxjs observable subject

我会向你解释我的(可能很少)问题:)

我试图创建一个设置并获取一些数据的localStorage(对象数组)。 我有一个组件在我的本地存储阵列中添加对象,另一个组件可以获取此数据。

我在ionic2标签应用上,当我设置本地存储空间时,我的另一个视图,我得到了它,它没有更新......

我想我必须使用RxJs主题,但我不知道这是怎么做的。

查看我当前的代码

// 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)
 }
}

那么,当我在第一个组件中设置时,如何更新我的第二个组件? 提前谢谢,如果我不清楚,请不要犹豫说出来:))

1 个答案:

答案 0 :(得分:0)

问题是你的第二个组件在第一个组件在下一次调用之后订阅,所以他没有得到任何数据。对于这种情况,您应该使用BehaviorSubject来获取最新的发射值:

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