2014-01-07 72 views
5

我使用AngularJS v1.2.7 Cordova 3.3.0(Android)我需要在手机内存中存储一​​些设置 - 所以当应用程序/设备重新启动时,应用程序仍然可以有权访问这些存储的数据。Angularjs localStorage存储设置在科尔多瓦应用程序

有关这方面的任何教程?我无法找到任何:(

明知科尔多瓦支持;本地存储,的WebSQL(no more maintained),是IndexedDB(not widely supported由Opera和Safari)我倾向于使用localStorage的,但它保留/记住我的数据,即使重新启动后?。该设备

目前我使用的答案#12969480 by Richard Szalay

回答

1

我建议编写自定义插件,并妥善保存在Objective-C的用户默认设置。

LocalStorage不是永久性存储,而WebSQL似乎用来存储设置过大。

你不必太参与Objective-C和有良好的PhoneGap /科尔多瓦插件指南:

http://docs.phonegap.com/en/3.3.0/guide_hybrid_plugins_index.md.html#Plugin%20Development%20Guide

我使用此代码来存储“FirstRun”变量来检查该应用程序是一个新的安装。该插件会检查应用程序是否已经运行过,并返回1或0,该值将被解析为一个整数并评估为true/false。

您可以更新此代码并将更多方法添加到“AppChecks”类中。我把所有简单的检查和设置存储在这个类。

AppChecks.h

#import <Cordova/CDVPlugin.h> 

@interface AppChecks : CDVPlugin 

- (void) checkFirstRun:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options; 

@end 

AppChecks.m

#import "AppChecks.h" 
#import <Cordova/CDVPluginResult.h> 

@implementation AppChecks 

- (void) checkFirstRun:(NSMutableArray *)arguments withDict:(NSMutableDictionary *)options { 
NSString* callbackId = [arguments objectAtIndex:0]; 

CDVPluginResult* pluginResult = nil; 
NSString* javaScript = nil; 

@try { 

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    NSString *isFirstRun = @"1"; 

    if (![defaults objectForKey:@"firstRun"]) { 
     [defaults setObject:[NSDate date] forKey:@"firstRun"]; 
    } else { 
     isFirstRun = @"0"; 
    } 

    pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:isFirstRun]; 
    javaScript = [pluginResult toSuccessCallbackString:callbackId]; 
} @catch (NSException* exception) { 
    // could not get locale 
    pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_JSON_EXCEPTION messageAsString:[exception reason]]; 
    javaScript = [pluginResult toErrorCallbackString:callbackId]; 
} 
[self writeJavascript:javaScript]; 
} 
@end 

用在我的Javascript代码:

cordova.exec(
    function(isFirstRun) { 
     isFirstRun = parseInt(isFirstRun); 
     if(isFirstRun) { 
      // do stuff for first run 
     } 
    }, 
    function(err) { 
     // handle error from plugin 
    }, 
    "AppChecks", 
    "checkFirstRun", 
    [] 
); 
+0

你是对的; LocalStorage不是永久性存储。即使我不想为此应用程序使用Objective-C,我也会尝试您的示例。 – numediaweb

+0

对不起,我应该更新我的答案,所以插件是用Java编写的,我只是将它作为Objective-C插件实现,但它可以转换为Java/Android。 Javascript部分将保持不变 –

+2

我的经验仅适用于Cordova 2.x和Android,但localStorage _was_在重新启动之间持续存在(虽然不在重新安装之间)。 – rachel

2

我环顾四周为它的地狱类似的东西,我发现以下几点:

http://ngmodules.org/modules/angularLocalStorage

例子显示保存的状态文本框: http://plnkr.co/edit/Y1mrNVRkInCItqvZXtto?p=preview

var eS = angular.module('exampleStore', ['localStorage']); 

    eS.controller('MainCtrl',['$scope','$store',function($scope, $store) { 
     $store.bind($scope, 'propertyOnScope', 'My default value'); 

     $scope.clearTest = function(){ 
      $store.remove('propertyOnScope'); 
     }; 
    }]); 
+0

+1。感谢fairweather。我发现https://github.com/gsklee/ngStorage是一个更好的选择;没有Getter'n'Setter功能,只是普通的JS。 – numediaweb

+0

很酷。我发现模块的好处是,当模型更改时,该变量会自动保存。没有获得者或制定者;只是一个约束力。感谢碰撞。 –

0

localStorage的翻译与科尔多瓦的本地文件系统,所以在事实上,数据将在安装的整个过程中持续存在。

查看ngCordova来自Drifty的人创建了Ionic

这些AngularJS Cordova包装让生活变得更容易,如果你是想通过Cordova使用本地设备功能的人,使用AngularJS作为你的前端。

此外,请查看他们的新网络系列,the Ionic Show。他们谈论混合移动应用程序开发人员目前使用的相关工具。

使用带有phonegap的localStorage的基本教程可以找到here

+4

您是否有文档或参考文献“LocalStorage已转换为Cordova的本机文件系统?”科尔多瓦会改变webstorage的路径吗?我知道在iOS上,有人担心LocalStorage在设备存储空间不足时会被刷新。 –

相关问题