angularjs - 为什么工厂在使用 $http.get 时优先提供服务

标签 angularjs service factory

我在项目中使用 anularJS,我需要一个服务来使用 $http.get 方法获取 JSON,我认为该服务的语法更易于阅读:

app.service('ApiService' , function($http)
{
  var self = this;
  self.user = {};
  self.user.getByName = function(){};
  self.user.getByRate = function(){};

  self.events = {};

  self.events.getList = function(){};
  self.events.getByDate = function(){};

  return ({
    user : self.user,
    events : self.events
  });

});

然后你可以这样调用它:

$scope.reople = ApiService.use.getList('some url');

但从太多页面(如 thisthisthis )我已经看到,使用工厂作为更好的方法似乎更受欢迎。你能解释一下吗:

  1. 为什么工厂比服务更受青睐和欢迎?
  2. 对于团队工作还是对于处理现有代码的开发人员而言,哪个更具可扩展性和可维护性?

最佳答案

.service() 只是 .factory() 的派生版本,两者都派生自 .provider(),所有其中的一部分用于注册服务以通过应用程序中的 DI 使用。

请参阅AngularJS: Service vs provider vs factory如果您想深入了解细节。

.factory()之所以受欢迎,大概是因为:

  • .service()过于具体,只能传入一个构造函数
  • .provider() 过于冗长,并非所有时间服务都应该是可配置的

.factory() 位于中间,可满足几乎常见用法的需求。

app.factory('ApiService' , function($http) {
  function ApiService() {
    var self = this;
    self.user = {};
    self.user.getByName = function(){};
    self.user.getByRate = function(){};

    self.events = {};
    self.events.getList = function(){};
    self.events.getByDate = function(){};
  };

  return new ApiService();
});

关于angularjs - 为什么工厂在使用 $http.get 时优先提供服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24776604/

相关文章:

javascript - 当输入的数据不在数据库中时禁用按钮

javascript - 如果它为空,如何编写条件http.get来创建记录

javascript - 如何在 TypeScript 中输入可配置的工厂函数?

design-patterns - 工厂模式。什么时候使用工厂方法?

javascript - AngularJS 模板标题未呈现

javascript - 返回一个 promise 抛出错误的 Promise

javascript - 在 Angular 中将 attrs 作为 $scope 变量传递

azure - Service Fabric 可靠服务 : Communication and Partitioning essentials

iis - SSRS 2005 API 导致应用程序池崩溃

c++ - 多态性是否适用于值?或者在按(基)值返回时使用派生类的 move 构造函数