AngularJS中多个$ http请求的最佳做法是什么?

例如,我有一个控制器来显示用户列表视图,一些列需要数据来自另一个端点,所以我用直觉写这些,你能告诉我如何重新生产他们?

$http.get($scope.urlA) .success(function(res){ $scope.dataA = res.data; $http.get($scope.urlB) .success(function(res){ $scope.dataB = res.data; }) .error(function(err){ if (err) throw err; }); }) .error(function(err){ if (err) throw err; }); 

那么最好的做法是为两个$ http.get调用创build两个工厂方法。 在Angular $ http自身调用promises,所以你的工厂看起来像:

 myapp.factory('getHttpData',function($http){ return{ getURLA:function(){ return $http.get('/urlA'); }, getURLA:function(){ return $http.post('/urlB'); } } }); 

然后在控制器中,你可以像这样调用两个工厂函数:

  .controller('testCtrl',['getHttpData',function(getHttpData){ getHttpData.getURLA().then(function(data){ //do whatever you want getHttpData.getURLB().then(function(Bdata){ //do whatever you desire }): }); }); 

它看起来不像第二个调用取决于第一个,所以你可以单独调用它们:

 $scope.data = {}; $http.get('http://example/url/a') .success(function(data) { $scope.data.a = data; }); $http.get('http://example/url/b') .success(funciton(data)) { $scope.data.b = data; }); 

如果呼叫b取决于来自呼叫a的呼叫服务的数据b来自呼叫a的成功回叫。