2014-09-05 38 views
1

很久以后,我开始重新认识角度,并且(到目前为止)我发现了两种创建角度服务的方法。最简单的是这样的:创建服务时,angular.Module.factory和angular.Module.service有什么区别?

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?我的意思是你不会从文档中知道你可以在列表中声明依赖关系,除非你已经完成了一个教程或其他东西。
+1

的可能重复[Angular.js:服务提供商VS VS工厂(http://stackoverflow.com/questions/15666048/angular-js-service-vs-provider-vs-factory) – 2014-09-05 06:40:47

回答

1

两个angular.Module.factoryangular.Module.service是代理来angular.Module.provide。当您给angular.Module.factory函数时,角将通过调用函数并使用其返回值作为服务创建相应的服务。另一方面,当您给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'; 
}); 
+0

在哪上下文会用在另一个上面。对我来说,感觉好像我几乎总是在'.service'上使用'.factory'。 – 2014-09-05 23:29:32

+0

通常,我使用'.factory'来创建一个构造函数(通过返回一个函数)和'。服务“来创建单例对象(通过将属性和方法写入'this',或者返回构造函数的实例) – 2014-09-08 08:36:22

+0

我没有看到任何一个优势。我认为这应该是你应该在团队中定义的一种惯例。我经常使用他们作为@SpencerAlger建议。 – Nikolas 2014-09-08 08:42:07

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