2017-09-06 1 views
0

J'ai stocké des objets dans LocalStorage et dans le hook ngOnInit je reçois ces données dans le tableau que je montre dans le template avec * ngFor. Comment puis-je surveiller les modifications dans LocalStorage et mettre à jour automatiquement la vue?Surveillez les changements dans LocalStorage angular2

Répondre

2

Ce que vous voulez est un sujet. Consultez les documents ici (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

En fin de compte cette solution est plus propre que le mien si vous pouvez compter sur tout ce qui utilise localStorage le fait par ce service. Vous avez cependant des problèmes de code. Le type du sujet est booléen, mais vous passez des chaînes à next(), et puisque vous passez des chaînes, cela pourrait aussi bien être la clé de l'élément modifié. Un élément peut également être défini pour correspondre à ce qui est déjà stocké, donc rien n'aurait dû changer, mais l'OP peut implémenter ce niveau de détail s'il le souhaite. –

+0

Merci beaucoup. Fonctionne parfaitement – Hubert