アプリに 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 では機能しない理由について助けが必要です。
ありがとうございました。
よろしく