2017-05-24 42 views
0

對Angular來說是合理的。我有一個服務,其目的是從JSON文件獲取信息,遍歷每個對象,以便我可以從控制器訪問數據。我可以從$http請求中訪問JSON數據,但不能訪問服務中for循環的JSON數據。從'for循環'返回響應數據 - AngularJS

這是循環AngularJS中的項目的最佳方式,如果是這樣,我如何從控制器訪問並顯示這些信息?

app.factory('fxRate', ['$http', '$q', function($http, $q){ 

var factory = {}; 

factory.getFx = function() { 
    var deferred = $q.defer(); 

    $http.get('../json/mcfx.json') 
     .then(
      function(response){ 

       var d, i; 

       var rateData = response.data.fxrate; 

       for (var i in rateData) { 
        var fx = rateData[i].usdToEur; 
        var fxDate = rateData[i].date; 
       } 
       deferred.resolve(response.data); 
      }, 
      function(errResponse){ 
       deferred.reject(errResponse.data); 
      } 
     ) 

    return deferred.promise; 

} 

return factory; 

}]); 

app.controller('dashboard', ['$scope', 'fxRate', function($scope, fxRate){ 

$scope.dailyFx = function() { 
    fxRate.getFx().then(function(data){ 
     console.log(data) 
    }); 
} 

$scope.dailyFx(); 

}]) 

回答

1

讓它簡單,從factory\service回報的承諾,在controller解決。 象下面這樣:

app.factory('fxRate', ['$http', function($http){ 
var factory = {}; 
factory.getFx = function() { 
    return $http.get('../json/mcfx.json'); 
} 

return factory; 
}]); 

控制器

app.controller('dashboard', ['$scope', 'fxRate', function($scope, fxRate){ 
$scope.dailyFx = function() { 
    fxRate.getFx().then(function(resonse) { 
     console.log(resonse.data) 
     //handle resonse\data, or assign to some $scope property. 
     var rateData = response.data.fxrate; 
     for (var i in rateData) { 
      var fx = rateData[i].usdToEur; 
      var fxDate = rateData[i].date; 
     } 
    }); 
} 

$scope.dailyFx(); 
}]) 

爲了表示對view\html這個數據,你需要把這個分配給一些$scope財產,如$scope.fxRateData = response.data.fxrate,然後在HTML渲染它的方式,你想要的。

僅作爲舉例:

<div ng-repeat="fxrate in fxRateData track by $index"> 
    <span>{{fxrate.usdToEur}}</span> 
    <span>{{fxrate.date}}</span> 
</div> 
+0

這是真實的,但如果我想保持功能從控制器分開.......我會怎樣呢? –

+1

@PatrickMcDermott:你的函數'$ scope.dailyFx()'是非常獨立的,如果你用'response.data'做一些操作,就像'handleResponse(response.data)'一樣,你可以從response部分提取另一個方法。 ' – anoop

+1

在這種情況下,謝謝你的幫助! –