2017-09-06 27 views
0

我在LocalStorage和ngOnInit钩子中存储了一些对象我将这些数据接收到数组中,该数组使用* ngFor在模板中显示。我如何监视LocalStorage中的更改并自动更新视图?监视LocalStorage中的更改angular2

回答

2

你想要的是一个主题。看看这里的文档(https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/subjects/subject.md

For a quick example, something like this: 
    @Injectable() 
export class StorageService { 
    ... 
    private storageSub= new Subject<boolean>(); 
    ... 

    watchStorage(): Observable<any> { 
    return this.storageSub.asObservable(); 
    } 

    setItem(key: string, data: any) { 
    localStorage.setItem(key, data); 
    this.storageSub.next('changed'); 
    } 

    removeItem(key) { 
    localStorage.removeItem(key); 
    this.storageSub.next('changed'); 
    } 
} 

Inside Component 

constructor(private storageService: StorageService ){} 
ngOnInit() { 
this.storageService.watchStorage().subscribe((data:string) => { 
// this will call whenever your localStorage data changes 
// use localStorage code here and set your data here for ngFor 
}) 

} 
+0

最终该方案比我的清洁剂,如果你能在使用localStorage的通过此服务这样做的一切算。不过你确实有一些代码问题。主题的类型是布尔型的,但是您将字符串传递给next(),并且由于您正在传递字符串,因此它可能是更改项目的关键字。此外,可以设置一个可能与存储中已有内容相匹配的项目,因此任何内容都不应该改变,但是OP可以根据需要实现该细节级别。 –

+0

非常感谢。完美的作品 – Hubert