Ionic 2 存储无法在 iOS 上运行,但在 Android 上运行。我正在使用这import { Storage } from '@ionic/storage';
在本地存储数据。
我做了这样的样品
import { Storage } from '@ionic/storage';
export class MyApp {
constructor(private storage: Storage) { }
setData() {
// set a key/value
storage.set('username', 'johndoe');
}
getData() {
// get a key/value pair
storage.get('username').then((val) => {
alert('Your username is', val);
});
}
}
它在安卓上完美运行。但是当我尝试在iOS上构建时,它不起作用。数据未显示。关于如何在 ionic 2 中存储持久数据的一些建议,该数据在 android 和 iOS 平台上完美运行。
首先,我没有看到您的主模块定义,所以我先谈谈这一点。在您的主应用程序模块中,您需要为IoinicStorageModule
进行导入,然后您需要将其放在imports
部分中:
imports:[IonicStorageModule.forRoot({'yourappname'})]
其次,我没有看到您检查存储是否已准备就绪,您可能也应该这样做:
this.storage.ready()
.then(() => {
this.storage.set(key, value);
});
最后,您的本地存储问题可以通过这个简单的服务轻松解决:
import { Injectable } from '@angular/core';
import { Storage } from '@ionic/storage';
@Injectable()
export class LocalStorageService {
constructor(private storage: Storage){
}
public setValue(key: string, value: string): Promise<boolean> {
return this.storage.ready()
.then(() => {
return this.storage.set(key, value)
.catch(() => {
return null;
});
});
//TODO: Handle storage not being available
}
public getValue(key: string): Promise<string> {
return this.storage.ready()
.then(() => {
return this.storage.get(key)
.catch(() => {
return null;
});
});
//TODO: Handle storage not being available
}
}
我每天都使用它。不要忘记围绕它包装一些单元测试。
如果你要安装SQLite插件,那么你在iOS上也不会有任何问题。
这是SQLite插件。
在本机应用上下文中运行时,存储将优先使用 SQLite,因为它是最稳定和广泛使用的基于文件的文件之一 数据库,并避免了诸如本地存储之类的一些陷阱 和 IndexedDB,例如操作系统决定清除此类数据 磁盘空间情况。