创建服务时angular.Module.factory和angular.Module.service有什么区别?

时间:2014-09-05 06:23:48

标签: angularjs

我在很长一段时间之后重新认识了角度,并且(到目前为止)我发现了两种创建角度服务的方法。最简单的是:

var app = angular.Module("SomeApp", [])
                 .factory("SomeService", function ($log) {
                    $log.info("Yea beh beh! Dis hea is a service!")
                 });

这种以角度创建服务的形式记录在angular.Module.factory中。但是,您还可以看到,在同一页面上,还有另一种使用angular.Module.service创建服务的方式。

阅读这两个描述,我无法理解.service以外的差异需要您明确使用new来实例化服务,而.factory隐式为您执行此操作。我可能在这里错了,因为我无法理解,因为我不知道$get属性是什么。所以,结束:

  • 什么是$get财产?
  • .service.factory之间的区别是什么?

最后,因为这会让我感到困惑:

  • 对于所有angular.Module.{service, factory, controller},第二个参数是function。但是,例如,您已为controller中的第二个参数放入一个列表,并命名其依赖项。那么为什么类型被视为function,而不是object?我的意思是你不会从文档中知道你可以在列表中声明依赖项,除非你已经完成了教程或其他事情。

2 个答案:

答案 0 :(得分:1)

angular.Module.factoryangular.Module.service都是angular.Module.provide的代理。当您将函数赋予angular.Module.factory angular时,通过调用函数并使用其返回值作为服务来创建相应的服务。另一方面,当您将函数赋予angular.Module.service angular时,会将其视为构造函数,并使用new关键字调用它来创建服务。

因此,使用angular.Module.factory创建服务如下所示:

app.factory('MySimpleService', function () {
   return {
      aServiceProperty : 'a property containing a string'
   };
});

使用angular.Module.service创建类似的服务如下所示:

app.service('MyOtherSimpleService', function () {
   this.aServiceProperty = 'a property containing a string';
});

答案 1 :(得分:0)

  1. 可以找到$ get属性的定义here
  2. 看起来这个问题已经asked and answered了。我无法发表评论,所以我发了一个答案。