2014-02-26 50 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的回答帮助我 –