CacheFactory работает в моем браузере, но не работает в моем apk

Я добавил angular-cache в свое приложение и создал свои элементы, как показано ниже:

angular.module('rotaryApp', ["ionic", "angular-cache"])
.run(function($ionicPlatform, CacheFactory) {
$ionicPlatform.ready(function() {
// Hide the accessory bar by default (remove this to show the accessory bar above the keyboard
// for form inputs)
if(window.cordova && window.cordova.plugins.Keyboard) {
  cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
}
if(window.StatusBar) {
  // org.apache.cordova.statusbar required
  StatusBar.styleDefault();
}
CacheFactory("songsDataCache", { storageMode: "localStorage", maxAge: 360000, deleteOnExpire: "aggressive" });
CacheFactory("versesCache", { storageMode: "localStorage", maxAge: 360000, deleteOnExpire: "aggressive" });
CacheFactory("chorusCache", { storageMode: "localStorage", maxAge: 360000, deleteOnExpire: "aggressive" });
CacheFactory("imageCache", { storageMode: "localStorage", maxAge: 360000, deleteOnExpire: "aggressive" });
CacheFactory("searchCache", { storageMode: "localStorage", maxAge: 360000, deleteOnExpire: "aggressive" });
//CacheFactory("myTeamsCache", { storageMode: "localStorage" });
//CacheFactory("staticCache", { storageMode: "localStorage" });

}); })

и мой сервис показан ниже:

(function () {
'use strict';

angular.module('rotaryApp').factory('eliteApi', ['$http', '$q', '$ionicLoading','CacheFactory', eliteApi]);

function eliteApi($http,$q,$ionicLoading,CacheFactory ) {
    var songid;  


   self.songsDataCache = CacheFactory.get("songsDataCache");
   self.versesCache = CacheFactory.get("versesCache");
   self.chorusCache = CacheFactory.get("chorusCache");


    function getLeagues(){
        var defered = $q.defer(),
         cacheKey = "songs",
       songsData = self.songsDataCache.get(cacheKey); 
       if(songsData){

            console.log("found data in cache");
            defered.resolve(songsData);

        } else {

            $ionicLoading.show({template: 'Loading Songs...'})
        var url = "http://bestng.com/notrealurl";
            $http.get(url)
            .success(function (data) {
                 $ionicLoading.hide();
            console.log("Received data via HTTP");
                self.songsDataCache.put(cacheKey, data);
                defered.resolve(data);

            })
            .error(function (data){
                defered.reject();
            });
        }

        return defered.promise;


    }


    function setSongid(sid){
        songid = sid;
    }

    return {
        getLeagues: getLeagues,
        getLeaguesByTitle: getLeaguesByTitle,
        getVerse:getVerse,
        getChorus:getChorus,
        getLeagueData: getLeagueData,
        setSongid: setSongid
    };
};

}) ();

Ниже мой контроллер:

(function () {
'use strict';

angular.module('rotaryApp').controller('LeaguesCtrl', ['$state', 'eliteApi', LeaguesCtrl]);

function LeaguesCtrl($state, eliteApi) {
    var vm = this;

    eliteApi.getLeagues().then(function(data){
        vm.leagues = data;

    });

};

}) ();

Функция getLeagues отлично работает в моем браузере, когда я не использую "ionic serve", но как только я делаю "ionic emulate android", он просто возвращает пустой экран. Пожалуйста, мне нужна помощь о том, почему это работает в моем браузере, но не работает в моем apk.

Спасибо за ваше время.

С уважением

1 ответ

Решение

Фабрика кэша должна быть объявлена ​​вне ionicPlatform.ready(), но внутри run(function(){ ...})

Сравните мой app.js в вопросе с рабочим app.js ниже:

angular.module('rotaryApp', ["ionic", "angular-cache"])

.run(function($ionicPlatform, CacheFactory) {
  $ionicPlatform.ready(function() {
  // Hide the accessory bar by default (remove this to show the accessory bar     above the keyboard
  // for form inputs)
  if(window.cordova && window.cordova.plugins.Keyboard) {
    cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
  }
  if(window.StatusBar) {
    // org.apache.cordova.statusbar required
    StatusBar.styleDefault();
  }
}); // end of ready()

CacheFactory("songsDataCache", { storageMode: "localStorage", maxAge:    360000, deleteOnExpire: "aggressive" });
CacheFactory("versesCache", { storageMode: "localStorage", maxAge: 360000,  deleteOnExpire: "aggressive" });
CacheFactory("chorusCache", { storageMode: "localStorage", maxAge: 360000,   deleteOnExpire: "aggressive" });
CacheFactory("imageCache", { storageMode: "localStorage", maxAge: 360000, deleteOnExpire: "aggressive" });
CacheFactory("searchCache", { storageMode: "localStorage", maxAge: 360000, deleteOnExpire: "aggressive" });

}); // end of run(function(){..})

Это сработало для меня. Я надеюсь, что это работает и для вас

Другие вопросы по тегам