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的成功回叫。