Localstorage无法在应用初始化中工作

时间:2015-07-20 05:10:39

标签: angularjs cordova local-storage

我的代码如下

angular
.module('core')
.factory('jsonstorage',function($rootScope,$http,$localStorage){

     return {
        set: function(entidy, value) {
           $rootScope.$storage = $localStorage;
            $rootScope.$storage[entidy] = value;

        },
        get: function(entidy) {
          if (typeof $rootScope.$storage != 'undefined') {
            return $rootScope.$storage[entidy];
          }
        }
    } 


});

控制器

angular
.module('core')
.controller('HomeController', function($scope,$http,$rootScope,$localStorage,jsonstorage) {
  var url = "http://test.com/?feed=xml";
  $http.get(
  url,
  {transformResponse:function(data) {
  // convert the data to JSON and provide
  // it to the success function below
    var x2js = new X2JS();
    var json = x2js.xml_str2json( data );
    return json;
  }
  }).
  success(function(data, status, headers, config) {
     jsonstorage.set('eventlist', data.feed.events.event);
  }).
  error(function(data, status, headers, config) {
      console.error('Error fetching feed:', data);
  }); 

$scope.feed.items =  $rootScope.storage['eventlist']


console.log(jsonstorage.get('eventlist'))

console.log($scope.storage['eventlist']);
});

问题:

在Android设备上安装应用程序时,存储返回未定义的值。但是当我通过chrome重新加载应用程序时:// inspect /#devices将所有数据Feed重新加载回来。

我在桌面上没有Chrome浏览器的问题。

当我删除应用并将其重新设置为设备

时,它会一直发生

任何帮助表示赞赏

由于

1 个答案:

答案 0 :(得分:0)

每次删除应用时,都会删除本地存储。无法在应用删除之间保留数据。

此外,您正在进行的AJAX调用是异步调用,您必须在.success()方法中初始化$scope.feeds.items,而不是如下所示:

angular.module('core')controller('HomeController',
   function($scope,$http,$rootScope,$localStorage,jsonstorage) {
     var url = "http://test.com/?feed=xml";
     $http.get(url, {transformResponse:function(data) {
      var x2js = new X2JS();
      var json = x2js.xml_str2json( data );
      return json;
   }
 }).
 success(function(data, status, headers, config) {
   jsonstorage.set('eventlist', data.feed.events.event);
   $scope.feed.items =  $rootScope.storage['eventlist'];
   console.log(jsonstorage.get('eventlist'))
   console.log($scope.storage['eventlist']);
 }).
 error(function(data, status, headers, config) {
  console.error('Error fetching feed:', data);
 }); 
 });

此外,当您刷新页面时,您的代码正在运行,因此到那时,您的第一个AJAX调用的响应将被返回,从而初始化$scope.feeds.items