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

时间:2014-08-01 05:21:13

标签: javascript node.js angularjs

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

$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;
  });

2 个答案:

答案 0 :(得分:2)

然后最好的做法是为两个$ http.get调用创建两个工厂方法。在Angular $ http中自己调用promises,因此你的工厂看起来像:

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

然后在Controller中,您可以调用这两个工厂函数:

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

答案 1 :(得分:0)

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

$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来自呼叫成功回叫。