2016-12-18 26 views
0

我将解释我(可能小)的问题:)Angular2本地存储主题()

我试图使该设置的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) 
} 
} 

那么,怎样才能更新我的第二个组件时我在第一个? 预先感谢您,如果我不清楚,请不要犹豫,说出来:)

回答

0

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

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

哦,是的!它正在工作!谢谢@FunStuff :) – ValSouche

+0

欢迎您:)不要忘记接受答案。 – Bazinga