Localalstorage не работает при инициализации приложения

0

У меня есть код ниже

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://проверяю/# устройства, все данные загружаются.

У меня не проблема с браузером Chrome на рабочем столе.

Это происходит все время, когда я удаляю приложение и повторно инициализирую его на устройстве

Любая помощь оценивается

благодаря

  • 0
    этот вызов ajax является асинхронным. Таким образом, метод set был бы применен ко времени вызова метода get.
  • 0
    У вас есть идеи, как это исправить, спасибо
Показать ещё 1 комментарий
Теги:
cordova
local-storage

1 ответ

0
Лучший ответ

Каждый раз, когда вы удаляете свое приложение, локальное хранилище удаляется вместе с ним. Невозможно сохранить данные между удалениями приложений.

Кроме того, вызов AJAX, который вы делаете, является асинхронным вызовом, вы должны инициализировать свой $scope.feeds.items в методе.success(), но не вне этого:

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 инициализируется.

  • 0
    Спасибо, понял, что я тупой

Ещё вопросы

Сообщество Overcoder
Наверх
Меню