0

アプリで使用するデータを取得するためにいくつかの呼び出しを行うサービスがあります。データを読み込んだ後、別のサービスを呼び出してデータを操作する必要があります。問題は、2 番目のサービスが最初のサービスのデータにアクセスできないことです。

プランカーを作成しました: plunkr

最初のサービス

app.factory('Report', ['$http', function($http,$q){
var Authors = {

    reports : [],
    requests :[{'url':'data.json','response':'first'},
               {'url':'data2.json','response':'second'}, 
               {'url':'data3.json','response':'third'}]

};

Authors.getReport = function(target, source, response, callback) {
    return $http({  url:source, 
                    method:"GET", 
                    //params:{url : target}
                }).success(function(result) {
                    angular.extend(Authors.reports, result)
                    callback(result)
      }
      ).error(function(error){
                })   
}

    Authors.startQueue = function (target,callback) {
        var promises = [];
        this.requests.forEach(function (obj, i) {
            console.log(obj.url)
            promises.push(Authors.getReport(target, obj.url, obj.response,  function(response,reports){
                callback(obj.response,Authors.reports)
            }));
        });
    } 


return Authors;

}])

セカンドサービス

app.service('keyService', function(){
this.analyze = function(value) {
    console.log(value)
    return value.length
}
});

コントローラー

コントローラーでは、次のようなことを試します。

    $scope.result = Report.startQueue('http://www.prestitiinpdap.it', function (response,reports,keyService) {
        $scope.progressBar +=33;
        $scope.progress = response;
        $scope.report = reports;

    });

$scope.test = function(value){
    keyService.analyze($scope.report.about);
}
4

1 に答える 1

0

これがあなたの目的だと思いますか?基本的に、最初のサービスが成功した後に 2 番目のサービスを呼び出す必要があります。これを行う方法は他にもありますが、あなたの例に基づいて、これが最も簡単です。

http://plnkr.co/edit/J2fGXR?p=preview

$scope.result = Report.startQueue('http://www.prestitiinpdap.it', function (response,reports) {
    $scope.progressBar +=33;
    $scope.progress = response;
    $scope.report = reports;
    $scope.test($scope.report.about); //added this line
});

  $scope.test = function(value){
    $scope.example = keyService.analyze(value); //changed this line to assign property "example"
  }


  <body ng-controller="MainCtrl"> 
    <p>Hello {{name}}!</p>
    <p>Progress notification : {{progress}}!</p>
    <div ng-show="show">
    <progress percent="progressBar" class="progress-striped active"></progress>
    </div>
    <pre>{{report}}</pre>
    <pre>{{report.about}}</pre>

    {{example}} <!-- changed this binding -->
  </body>
于 2013-09-20T17:25:52.453 に答える