为什么我们在Angularjs中使用工厂/服务进行ajax调用?

时间:2017-03-08 05:30:56

标签: angularjs angular-http angular-controller angular-factory

我被告知我们使用工厂/服务来消除重复编码。这是代码的一部分,工作正常。

app.controller('ServicesCtrl',['$scope','DataFactory',function($scope,$http,DataFactory){

    DataFactory.GetData('services1.json')
      .then(function(response){
         $scope.returnedData = response.data;
    })
      .catch(function(response){
        console.log('Error in process',response.status,response.data);
    });
  }]);

app.controller('ContactCtrl',['$scope','DataFactory', function($scope,DataFactory){

    DataFactory.GetData('location.json')
      .then(function(response){
         $scope.returnedData = response.data;
    })
      .catch(function(response){
        console.log('Error in process',response.status,response.data);
    });
  }]);

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

  var factory = {};

  factory.GetData = function(path) {
    return $http.get(path);

  }
  return factory;
}]);

我的问题是1.当我们必须处理控制器内的承诺时,为什么要使用服务/工厂来进行这样的ajax调用?我的意思是,我必须在这两个控制器中进行相同的.then和.catch调用。它的效率在哪里?有没有更好的方法来做到这一点?或者我做错了吗?是否有可能在工厂内处理这些承诺并将response.data返回给不同的控制器?

2 个答案:

答案 0 :(得分:2)

这里的事情是代码的可重用性。现在假设您有一个名为

的服务
angular.module('test')
  .service('testService', function ($http) {

    this.getBidsUser = function ($username) {
      var endpoint = "bids/users/"+$username;

      return $http({
        method: 'get',
        url: endpoint
      });
    };

}

返回用户的出价。您可能希望在不同视图中使用相同的信息。因此,使用服务是一个好主意,这样您就不必再次重写相同的代码。

您可能希望在同一服务上拥有所有相同的端点相关服务以实现可维护性。

如果您不使用服务模式,您可能需要更改服务的终点。

承诺arr回电。如果您在服务中处理这些承诺,则维护呼叫者时间表并不容易。

答案 1 :(得分:0)

您好我们使用工厂和服务

  • 使应用程序更加模块化,
  • 有可能重用代码,
  • 隐藏实施细节

例如,一个进行http调用的服务可能被视为一个高级“服务”,它可以根据呼叫类型独立地返回所需的对象,并且可以在高级别重复使用。

该服务允许自定义调用参数,可以避免调用控制器指定其中的一些参数。或者它可以做一些预处理或后期处理,它可以做一些缓存等等。它便于携带,因此您可以在每次需要时拨打它。

关于你的上一个问题

  

是否有可能在工厂内处理这些承诺   将response.data返回给不同的控制器?

也许这是可能的,但实施起来可能很复杂,因为它与响应的时间有关。相反,我建议您使用模块ngResource中的$ resource服务,它已经可以完成您所需要的工作。

参见文档:

AngularJs Tutorial on $resource

Angularjs Programming guide on $resource

相关问题