【问题标题】:Angularjs localStorage to store settings in cordova appAngularjs localStorage 在科尔多瓦应用程序中存储设置
【发布时间】:2014-07-18 04:07:36
【问题描述】:

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

有没有这方面的教程?我找不到任何:(

知道 Cordova 支持; LocalStorage、WebSQL (no more maintained)、IndexedDB (not widely supported 由 Opera 和 Safari 提供)。我倾向于使用 LocalStorage,但即使在我重新启动设备后它会保留/记住数据吗?

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

【问题讨论】:

    标签: angularjs cordova settings local-storage


    【解决方案1】:

    我一直在四处寻找类似的东西。我发现了以下内容:

    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'); 
          };
      }]);
    

    【讨论】:

    • +1。谢谢费尔韦瑟。我发现github.com/gsklee/ngStorage 是一个更好的选择;没有 Getter 'n' Setter 函数,只有普通的 JS。
    • 酷。我发现的模块的好处是,当模型更改时,该变量会自动保存。也没有 getter 或 setter;只是一个绑定。感谢您的支持。
    【解决方案2】:

    我建议编写一个自定义插件并将设置正确存储在 Objective-C 用户默认值中。

    LocalStorage 不是永久存储,而 WebSQL 用于存储设置似乎有点过头了。

    您不必过多地参与 Objective-C 并且有很好的 Phonegap/Cordova 插件指南:

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

    我使用此代码存储“FirstRun”变量来检查应用程序是否是新安装的。该插件检查应用程序之前是否运行过,并返回 1 或 0,将其解析为整数并评估为真/假。

    您可以更新此代码并向“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",
        []
    );
    

    【讨论】:

    • 你是对的; LocalStorage 不是永久存储。即使我不想在此应用中使用 Objective-C,我也会尝试您的示例。
    • 对不起,我应该更新我的答案,所以插件是用 Java 编写的,我只将它作为一个 Objective-C 插件实现,但它可以转换为 Java/Android。 Javascript 部分将保持不变
    • 我的经验仅适用于 Cordova 2.x 和 Android,但 localStorage 在重新启动之间持续存在(尽管不是在重新安装之间)。
    【解决方案3】:

    LocalStorage 使用 Cordova 转换为本机文件系统,因此实际上数据将在安装的整个生命周期内保持不变。

    从创建IonicDrifty 中查看ngCordova

    如果您想通过 Cordova 访问本机设备功能,使用 AngularJS 作为前端,这些 AngularJS Cordova 包装器让生活变得更轻松。

    另外,请查看他们的新网络系列,the Ionic Show。他们讨论了适用于混合移动应用程序开发人员的当前相关工具。

    可以在here找到使用localStorage和phonegap的基本教程

    【讨论】:

    • 您是否有“LocalStorage 使用 Cordova 转换为本机文件系统”的文档或参考资料? Cordova 是否改变了网络存储的路径?我知道在 iOS 上有人担心当设备存储空间不足时 LocalStorage 会被刷新。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-08
    • 1970-01-01
    • 2014-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多