2016-06-28 68 views
0

我正在开发一个应用程序,使用运行cordova的离子框架,并且需要我在用户设备(Android/iOS)本地存储(例如SD ),我无法使用localStorage离子框架保存它,因为它将数据保存在缓存中。用Ionicframework创建本地存储(设备,而不是缓存)

在其他人中,我需要我的数据在设备上坚持很长一段时间。

我还有什么其他解决方案?

+1

http://www.html5rocks.com/en/tutorials/offline/storage/可能会有所帮助。 – Phonolog

+0

@Phonolog这样我仍然会在浏览器上使用缓存,但它仍然缓存:/ – xRed

+1

这几乎是对不同的可能性持久化数据的概述,如果你想写入文件系统/ sd卡的用户,请参阅[本节](http://www.html5rocks.com/en/tutorials/offline/storage/#file-access)。 – Phonolog

回答

1

HTML5 网络存储(即localStorage)并不总是一个不好的选择。这是一个广泛支持的现成的关键值存储。并且不,它不会在存储器中存储,正好是,即localStorage中的数据不会到期也不会被随机擦除。但是是一个有限和低优先级的存储,从平台到平台的具体细节各不相同。

这就是说,我们有以下更可靠的替代品,这依赖于你正在尝试存储:

  1. 本地的SQLite - 作为科尔多瓦的应用程序,你的应用程序可以访问创建和通过第三方SQLite Plugin使用原生SQLite数据库,就像原生移动应用程序一样。从JavaScript开始,您可以像访问Cordova之外的WebSQL一样访问数据。离子/ ngCordova帮助这里提供实用的包装围绕SQLite的插件:$ cordovaSQLite

  2. 本地文件系统 - 作为科尔多瓦的应用程序,你的应用程序可以访问本地文件存储(也,在Android上的SD卡上,如果这是用户存储应用程序的容器的地方)通过标准File Plugin。此外,离子提供它周围的公用包装与许多有用的功能:$ cordovaFile(检查ngcordova.com/docs/plugins/)

IndexedDB的也是这里值得一提。不是原生的移动解决方案,但是这个noSQL存储正在迅速成为大型可靠浏览器端存储的标准,标志着WebSQL已经过时。但是,iOS网络视图对IndexedDB提供了错误和不完整的支持(caniuse.com/#search=indexeddb)

根据您要存储的数据是什么来选择您的解决方案。为了存储应用程序数据,我使用Native SQLite(用于结构化数据)和localStorage(用于关键值数据,主要是UI首选项)的组合。为了存储资源,总是有文件系统。

+0

如果您只是想要一些与localStorage类似的键值对数据,您可以创建自己的文件并通读它。如果数据旨在成为您的应用程序的首选项,那么还会有一个[Preferences插件](http://ngcordova.com/docs/plugins/preferences/)提供类似的键值存储。 – Gaurav

+0

注意:如果您希望数据在卸载应用程序后仍然存在,恐怕您的选项有限。我只能想象如果你使用文件插件或首选项插件将数据存储在公共目录中应用程序容器外的文件中(请查看上述链接以了解具体操作方式)。其他一切注定要与应用程序一起擦除:-) – Gaurav