【问题标题】:why factory is preffered to service when using $http.get为什么使用 $http.get 时首选工厂服务
【发布时间】:2014-09-06 17:38:08
【问题描述】:

我在一个项目中使用 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. 对于团队工作或处理现有代码的开发人员来说,哪个更可扩展和可维护?

【问题讨论】:

标签: angularjs service factory


【解决方案1】:

.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();
});

【讨论】:

    【解决方案2】:

    工厂不是服务的首选。根据您需要延迟的响应类型,您需要回调还是返回结果值?分别适合的是服务或工厂。

    【讨论】:

      猜你喜欢
      • 2014-08-08
      • 2014-05-02
      • 2016-01-31
      • 2019-12-09
      • 1970-01-01
      • 1970-01-01
      • 2016-01-19
      • 2014-12-26
      • 2010-09-09
      相关资源
      最近更新 更多