我正在从事一个离子型项目,并试图用角缓存实现缓存。实现了角缓存,现在当我运行它时,我从控制器中得到一个错误,但是我看不到控制器代码中有任何错误。

我的app.js代码的一部分:
angular.module('Chemicar', ['ionic','ChemicarProduct.controllers', 'ChemicarProduct.services', '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) {
StatusBar.styleDefault();
}
CacheFactory("productsCache", { storageMode: "localStorage", maxAge: 5000, deletionOnExpire: "aggressive"});
});
})我的service.js代码:
angular.module('ChemicarProduct.services', [])
.service('ChemicarProductService', function($http, $q, CacheFactory){
var url1 = "XXXXXXXXX";
var productsCache = CacheFactory.get('productsCache');
var self = {
'products' : [],
'loadProducts' : function(){
var d = $q.defer(),
cacheKey = "products",
productsData = productsCache.get(cacheKey);
if(productsData){
console.log("Found data inside cache" , productsCache);
d.resolve(productsCache);
}
else{
$http.get(url1)
.success(function(data){
self.products = data;
console.log("Received data via http " , self.products);
productsCache.put(cacheKey, self.products);
d.resolve(data);
})
.error(function(msg){
console.log("Error while making http call " , msg);
d.reject("The promise was not fulfilled", data);
});
return d.promise;
}
}
};
return self;
});我的controller.js代码:
angular.module('ChemicarProduct.controllers', ['ChemicarProduct.services'])
.controller('ProductCtrl', function($scope, ChemicarProductService, $ionicLoading){
$scope.productItems = [];
$ionicLoading.show({template: "Loading..."});
ChemicarProductService.loadProducts().then(function success(data){
console.log(data);
$scope.productsItems = ChemicarProductService.products;
console.log('&&&&&&&&' , $scope.productItems);
$ionicLoading.hide();
},
function error (data){
console.log(data)
});
})发布于 2015-11-15 17:31:55
在服务中,只有当return d.promise;返回false时才调用false。
这就是为什么ChemicarProductService.loadProducts()不返回承诺的原因之一:
无法读取未定义的属性“则”
改为:
.service('ChemicarProductService', function($http, $q, CacheFactory){
var url1 = "XXXXXXXXX";
var productsCache = CacheFactory.get('productsCache');
var self = {
'products' : [],
'loadProducts' : function(){
var d = $q.defer(),
cacheKey = "products",
productsData = productsCache.get(cacheKey);
if(productsData){
console.log("Found data inside cache" , productsCache);
d.resolve(productsCache);
}
else{
$http.get(url1)
.success(function(data){
self.products = data;
console.log("Received data via http " , self.products);
productsCache.put(cacheKey, self.products);
d.resolve(data);
})
.error(function(msg){
console.log("Error while making http call " , msg);
d.reject("The promise was not fulfilled", data);
});
//return d.promise;
}
return d.promise; // <---- fix
}
};
return self;
});https://stackoverflow.com/questions/33722590
复制相似问题