解释
你在这里得到了不同的东西:
First:
- 如果您使用服务,您将获得函数的实例 ("
this
”
关键词)。
- 如果你使用工厂你会得到返回的值
调用函数引用(工厂退货声明)。
ref: Angular.Service 与 Angular.Factory
Second:
请记住,AngularJS 中的所有提供者(值、常量、服务、工厂)都是单例!
Third:
使用其中之一(服务或工厂)与代码风格有关。
但是,一般的方法在 AngularJS 中是使用factory.
Why ?
Because “工厂方法是将对象引入 AngularJS 依赖注入系统的最常见方式。它非常灵活,可以包含复杂的创建逻辑。由于工厂是常规函数,我们还可以利用新的词法作用域来模拟“私有”变量。这非常有用,因为我们可以隐藏给定服务的实现细节。”
(ref: http://www.amazon.com/Mastering-Web-Application-Development-AngularJS/dp/1782161821).
Usage
服务 :对于共享实用函数非常有用,这些函数可通过简单地附加来调用()
到注入的函数引用。也可以运行injectedArg.call(this)
或类似的。
工厂 :对于返回“类”函数可能很有用,然后可以对其进行新建以创建实例。
So, 当你有复杂的逻辑时使用工厂为您服务并你不想暴露这种复杂性.
在其他情况下如果您想返回服务的实例,只需使用 service.
但随着时间的推移,你会发现我认为 80% 的情况下你都会使用工厂。
更多细节:http://blog.manishchhabra.com/2013/09/angularjs-service-vs-factory-with-example/
UPDATE :
优秀的帖子在这里:http://iffycan.blogspot.com.ar/2013/05/angular-service-or-factory.html
“如果你想要你的功能像普通函数一样被调用, use
factory。如果您希望用新的函数实例化您的函数
操作员,使用服务。如果您不知道区别,请使用工厂。”
UPDATE :
AngularJS 团队做了他的工作并给出了解释:http://docs.angularjs.org/guide/providers
从这个页面:
“Factory 和 Service 是最常用的配方。它们之间的唯一区别是 Service 配方更适合自定义类型的对象,而 Factory 可以生成 JavaScript 原语和函数。”