1

我只需要在localStorage中存储数组并继续向该数组添加元素,以便我可以在应用程序中检索该存储数组。这对Angular Local Storage Module来说肯定是一件非常简单的事情,但它让我很烦恼,我希望能够得到一些帮助。使用角度本地存储模块在本地存储阵列中存储元素

以下是角码我有我使用的存储querieslocalStorage使用angular-local-storage模块:

.factory('QueryService', ['localStorageService', function(localStorageService) { 
     var queries = []; 
     var factory = {}; 

     factory.addQuery = function(query) { 
      queries.push(query); 

      localStorageService.set('queries', queries); 
      return localStorageService.get("queries"); 
     }; 
     return factory; 
    }]) 

我每次查询添加到queries阵列,我只得到了最后一个元素添加返回结果。所以基本上,localStorageService.get("queries")给我加入queries阵列的最后一个元素。

难道有人请帮助我明白,为什么我只得到我添加到queries数组返回的最后一个元素?

编辑: 我加入到queries阵列我刷新浏览器的每个元素之后。

+1

是否_AngularJS_ localStorage的模块自动'stringify'和'parse'你的阵列为您服务。我的理解是,localStorage目前仅支持字符串。因此需要转换(通常使用'JSON.stringify'和'JSON.parse')。我在之前的[答案](http://AngularJS_之外)中写了这个(http://stackoverflow.com/questions/16083919/push-json-objects-to-array-in-localstorage/16084772#16084772)。不知道预构建模块是否适用于您... – War10ck 2014-10-09 17:31:15

+1

关于您的编辑,您是否在将内容存储在localStorage之前或之后刷新浏览器? – War10ck 2014-10-09 17:32:02

+0

@SnareChops&@ War10ck:在添加新元素到'queries'数组之间刷新浏览器是否可以清理'queries'数组? – skip 2014-10-09 17:33:41

回答

3

通常情况下,您不能直接使用localStorage存储数组。但角度本地存储为您在这条线上看到这个工作:https://github.com/grevory/angular-local-storage/blob/ed422c04764d4981a48f4c40859d65087b1b9838/src/angular-local-storage.js#L119

回答你的问题的线索是,你添加一个元素后刷新你的浏览器,所以查询数组确实得到清理。浏览器刷新实际上会抹去所有的JavaScript值,甚至整个AngularJS应用程序都会重新启动。

为了让你的代码工作,你必须初始化控制器的第一行查询数组:

.factory('QueryService', ['localStorageService', function(localStorageService) { 
     var queries = localStorageService.get('queries') || []; 
     var factory = {}; 

     factory.addQuery = function(query) { 
      queries.push(query); 

      localStorageService.set('queries', queries); 
      return localStorageService.get("queries"); 
     }; 
     return factory; 
    }])