2014-01-07 102 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在設備存儲空間不足時會被刷新。 –

相關問題