0

角度のあるアプリを構築するのに少し助けが必要です。

「OfferListCntrl」(オファーのリストを表示) と「OfferDetailsCntrl」(ID を介して単一のオファーを表示) の 2 つのコントローラーと、「Offers」と呼ばれるサービス/モデルがあります。GetOffers (オファーの配列を返す) と GetOffer (単一のオファーを返す) というオファー サービスを介して、それぞれ 2 つの Web サービスに接続します。

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 質問。

  1. 問題は、Offers.getOffer(id) が呼び出されたときです。ローカル データがあるかどうかを検出するようです。ローカル データがない場合は、Web サービスを呼び出してすべて問題ありませんが、既存のデータがある場合は、それを OfferDetailCtrl に戻そうとすると、エラーが発生します。戻る直前にその内容をconsole.logに記録できますが、すべてが無傷であるように見えるため、コントローラーが約束を受け入れるが実際のオブジェクトを受け入れない理由がわかりません。

エラー: 'undefined' は関数ではありません ('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

もっと良い方法があれば、私はそれを聞くのが大好きです:)あなたの助けに感謝します

4

1 に答える 1