获取离子存储中的所有存储密钥

时间:2017-12-13 11:40:46

标签: android angular ionic-framework ionic3

我是Ionic app开发的新手,我一直在关注相同的教程。

我一直在尝试使用IonicStorageModule,但即使在Chrome浏览器移动视图模式下运行应用时没有错误,也不会生成本地存储密钥。

在我的app.module.ts中,我有

import { IonicStorageModule } from '@ionic/storage';

然后我在imports数组中有以下导入,

  imports: [
    BrowserModule,
    HttpModule,
    IonicModule.forRoot(MyApp),
    IonicStorageModule.forRoot()
  ],

现在,我创建了一个名为user-settings.service.ts

的服务
import { Injectable } from '@angular/core';
import { Storage } from '@ionic/storage';

@Injectable()
export class UserSettings {
    constructor(private storage:Storage){}

    favoriteTeam(team,tournamentId, tournamentName) {
        let item = { team: team,tournamentId : tournamentId, tournamentName : tournamentName};
        this.storage.set(team.id , JSON.stringify(item));
    }

    unFavoriteTeam(team) {
        this.storage.remove(team.id);
    }

    getAllFavorites() {
        let items = [];
        return this.storage.forEach((v,k,i) => {
            items.push(JSON.parse(v));
        }).then(() => {
            return items;
        });

    }
}

现在在我的组件类中,我正在尝试检索所有收藏夹,但它没有按预期工作:

  ionViewDidEnter() {
    this.userSettings.getAllFavorites().then((val) => {
      _.forEach(val,(v,k)=> {
        this.favorites.push(v);
      });
    });

    console.log(this.favorites);
  }

我做错了吗?

如何从离子存储中检索所有键值?

这是正确的方法吗?好像很多迭代给我。

2 个答案:

答案 0 :(得分:1)

我知道这是一个迟到的回复。我发布此信息是因为这对其他人有帮助。

如果您将喜爱的项目存储为单独的键;您可以使用forEach来读取所有键和值。

getAllFavorites() {
    var promise = new Promise((resolve, reject) => {
      this.storage.forEach((value, key, index) => {
        this.list.push(value);
      }).then((d) => {
        resolve(this.list);
      });
    });
    return promise;
}

注意:在此示例中,我只是在读取过程完成后通过存储返回值。

因此,您可以按如下方式使用此方法;

this.userSettings.getAllFavorites().then((d) => {
      console.log(d);
});

正如我在您的代码中看到的,您应该返回promise而不仅仅是列表。

答案 1 :(得分:0)

您可以同时存储所有喜爱的球队,例如:

this.storage.set('favorites', teams)

因此,在ionViewDidEnter,您需要从存储中加载所有收藏夹(作为列表):

ionViewDidEnter() {
  this.storage.get('favorites', ...).then(val => {
     this.favorites = ...
  }
}

然后您只需在列表中添加或删除项目并保存。