我需要一些帮助来构建我的 Angular 应用程序。
我有两个控制器,“OfferListCntrl”(显示报价列表)和“OfferDetailsCntrl”(通过 id 显示单个报价)以及称为“报价”的服务/模型。他们分别通过 Offers 服务 GetOffers(返回优惠数组)和 GetOffer(返回单个优惠)连接到两个 Web 服务,如果已经调用 GetOffers(保存服务调用),我试图避免调用 GetOffer(id)
MyApp.factory('Offers', function($http,Config) {
var data=[];
var Offers = {
get: function () {
var promise = $http.get(Config.API_END_POINT + "GetOffers?appID=12",{cache:"true"})
.then(function (response){
data = response.data;
return response.data;
});
return promise;
},
getOffer: function(id) {
var local = _.find(data.Offers, function(offer) { return offer.OfferID == id });
if(local){
console.log("local copy found:" + local.OfferID);
console.log(local.Description);
console.log(local);
return local;
}
else {
var promise = $http.get(Config.API_END_POINT + "GetOffer?appID=12&OfferID=" + id,{cache:"true"})
.then(function (response){
console.log("no local, calling ws");
return response.data;
});
return promise;
}
}
};
return Offers;
});
function OfferDetailCtrl($scope,$http,Offers) {
Offers.get().then(function (asyncData){
$scope.offers = asyncData.Offers;
});
}]);
function OfferDetailCtrl($scope,$routeParams,$http,$location,Offers) {
$scope.offerId = $routeParams.offerId;
Offers.getOffer($scope.offerId).then(function (asyncData){
$scope.offer = asyncData;
});
}
1个问题。
- 问题是当 Offers.getOffer(id) 被调用时:它似乎检测它是否有本地数据,如果没有本地数据它调用 web 服务并且一切都很好,但是如果有现有数据,它尝试将其返回到 OfferDetailCtrl,然后出错。我可以在返回之前对它的内容进行控制台记录,这一切似乎都完好无损,所以我很困惑为什么控制器会接受一个承诺而不是实际的对象。
错误:“未定义”不是函数(正在评估“Offers.getOffer($scope.offerId).then(function (asyncData){ $scope.offer = asyncData; console.log($scope.offer); })”) OfferDetailCtrl@ http://staging.scanzap.com.au/assets/js/offers/OfferDetailController.js:17
如果有更好的方法我可以做这个我很喜欢听到它:) 谢谢你的帮助