0
我在LocalStorage和ngOnInit钩子中存储了一些对象我将这些数据接收到数组中,该数组使用* ngFor在模板中显示。我如何监视LocalStorage中的更改并自动更新视图?监视LocalStorage中的更改angular2
我在LocalStorage和ngOnInit钩子中存储了一些对象我将这些数据接收到数组中,该数组使用* ngFor在模板中显示。我如何监视LocalStorage中的更改并自动更新视图?监视LocalStorage中的更改angular2
你想要的是一个主题。看看这里的文档(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
})
}
最终该方案比我的清洁剂,如果你能在使用localStorage的通过此服务这样做的一切算。不过你确实有一些代码问题。主题的类型是布尔型的,但是您将字符串传递给next(),并且由于您正在传递字符串,因此它可能是更改项目的关键字。此外,可以设置一个可能与存储中已有内容相匹配的项目,因此任何内容都不应该改变,但是OP可以根据需要实现该细节级别。 –
非常感谢。完美的作品 – Hubert