我是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);
}
我做错了吗?
如何从离子存储中检索所有键值?
这是正确的方法吗?好像很多迭代给我。
答案 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 = ...
}
}
然后您只需在列表中添加或删除项目并保存。