【问题标题】:Watch for changes in LocalStorage angular2注意 LocalStorage angular2 的变化
【发布时间】:2018-02-15 03:37:29
【问题描述】:

我将一些对象存储在 LocalStorage 和 ngOnInit 挂钩中,我将这些数据接收到我使用 *ngFor 在模板中显示的数组中。如何观察 LocalStorage 的变化并自动更新视图?

【问题讨论】:

    标签: angular local-storage angular2-template


    【解决方案1】:

    你想要的是一个主题。在此处查看文档 (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<String>();
      ...
    
      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 可以根据需要实现该级别的详细信息。
    • 非常感谢。完美运行
    • 但是如果用户直接从浏览器的 devTools 更改本地存储呢?
    • 我应该在组件中取消订阅吗?
    猜你喜欢
    • 1970-01-01
    • 2020-01-05
    • 2021-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-13
    • 2020-08-27
    • 1970-01-01
    相关资源
    最近更新 更多