为什么我们在AngularJS中使用工厂/服务来进行AJAX调用



我被教导说我们使用工厂/服务来消除重复的编码。这是可以正常工作的代码的一部分。

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呼叫?我的意思是,我必须在此处的两个控制器中进行相同的。效率在哪里?有什么更好的方法吗?还是我做错了?是否有可能在工厂内的那些承诺工作并将响应归还给其他控制器?

这里的是代码的重复使用。现在假设您有一个名为

的服务
angular.module('test')
  .service('testService', function ($http) {
    this.getBidsUser = function ($username) {
      var endpoint = "bids/users/"+$username;
      return $http({
        method: 'get',
        url: endpoint
      });
    };
}

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

再次,您可能希望在同一服务上拥有所有相同的终点服务以维护性。

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

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

嗨,我们使用工厂和服务

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

例如,一项使HTTP调用的服务可以将其视为高级"服务",它可以使您回到所需的对象,并通过呼叫类型不断地将其重复使用。

该服务允许自定义调用参数,也许避免了其中一些由呼叫控制器指定。或者它可以进行一些预处理或后处理,可以进行一些缓存,依此类推。和它的便携式,因此您可以每次需要时称其为。

对于您的最后一个问题

有可能在工厂内部努力 将响应.data返回到不同的控制器?

也许是可能的,但是可以像响应的时间一样实施复杂。相反,我建议您在模块Ngresource中的$ Resource Service,它可以做您的neeed。

请参阅文档:

$ resource

的angularjs教程

$ Resource

上的AngularJS编程指南

最新更新