为什么工厂在使用$ http.get时更喜欢服务

时间:2014-07-16 09:05:21

标签: 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');

但是我看到过多的网页(例如thisthis以及this),使用工厂作为更好的方法似乎更受欢迎。可以请你解释一下:

  1. 为什么工厂更受欢迎,比服务更受欢迎?
  2. 对于小组工作或处理现有代码的开发人员来说,它是否更具扩展性和可维护性?

2 个答案:

答案 0 :(得分: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();
});

答案 1 :(得分:2)

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