2014-02-26 81 views
0

我已經創建了一個角度服務,這基本上是另一個服務的包裝,使$ JSON數據的資源請求。這個'包裝服務'做一些數據格式化,然後將結果返回給我的控制器。

我的問題是,我努力從我創建的'wrapper'服務中的函數填充我的控制器中的$ scope變量(總是未定義)。我已經嘗試了一些Deferred API,但是如果我在控制器中調用promise.then方法(沒有格式化它)而失敗,我只能成功地在控制器中獲取數據。

如何將格式化的列表返回給我的控制器?我編寫了一個Plunker,下面的代碼不能編譯,但包含了我想要實現的內容。

http://plnkr.co/edit/AGyyqvawpnBmKXTcvGkJ?p=info

+0

如果重擊者不起作用,那麼我們如何才能弄清楚如果你的代碼存在問題或者只是在重擊者身上? –

+0

而不是使用一個因素你試過一個服務?來自:routingRulesServices.factory('RuleSets'到:routingRulesServices.service('RuleSets' –

+0

嗨安東尼朱,我明白這是很難與一個代碼示例,不編譯,但我相信我的問題是一個根本的理解不夠,所以我確信有人可以協助,Wawy能夠:) –

回答

1

這是不能夠編譯plunkr有點困難,但是你能告訴我,如果這個工程:

factory.js:

routingRulesHelper.factory('ruleSetQueryWrapper', ['$q','RuleSets', 

function($q, RuleSets) { 
    var formatResults = function (ruleSet) { 

     var aRuleSchedule = {}; 

     //format the payload to correct data ........... 

     return aRuleSchedule; 
    }; 
    return { 
     getRuleSetById: function(ruleSetId){ 
      var deferred = $q.defer(); 
      var ruleset = RuleSets.query({ruleSetId: ruleSetId}, function(ruleSet) { 
       deferred.resolve(formatResults(ruleSet)); 

      }, function(response) { 
       //404 or bad 
       if(response.status === 404) { 
        console.log("HTTP Error", response.status); 
       } 
       deferred.reject(); 
      }); 
      return deferred.promise; 
     } 
}}]); 

controller.js:

routingRulesControllers.controller('RulesDisplayCtrl', ['$scope', '$location', '$routeParams', 'RuleSets', 'ruleSetQueryWrapper', 
function($scope, $location, $routeParams, RuleSets, ruleSetQueryWrapper) { 

    $scope.formattedResults = null; 

    if($routeParams.ruleSetId) { 
     ruleSetQueryWrapper.getRuleSetById($routeParams.ruleSetId).then(function(results) { 
      $scope.formattedResults = results; 
     }); 
    } 
}]); 
+0

我同意有了這個,user1027339正試圖解決他的服務內的承諾,他應該返回承諾,並在控制器內部解決它,如圖所示 –

+0

你是一個傳奇人物,謝謝你,結果相當明顯,一旦看到它,但我需要當涉及到異步數據和延遲/承諾API時,可以獲得我的理解水平。 –

0

我相信你應該不是這個

deferred.resolve(ruleSet)

deferred.resolve(formatResults(ruleset))

,你也沒有在getRuleSetById服務方法返回deferred.promise。

+0

謝謝你的想法,這也是正確的,但我只是在控制器中缺少一些邏輯,Wawy的回答幫助我 –