在阅读了很多关于工厂和服务之间的差异之后,我想我终于得到了它,但是大多数文章说70%的时候我会使用工厂,这没有任何意义。为什么我想要一个场景,每个控制器/指令都有一个同一工厂的不同对象。
首先,我构建了一个简单的联系人列表网站和一个包含所有联系人的服务(非工厂)。对于需要它们的每个指令/控制器,我将注入服务并且所有将具有相同服务的相同实例,因此任何控制器/指令的任何更改都将具有最新的联系人,因为只有一个联系人数组在我的网站上。
您能告诉我需要实施工厂而不是服务的真实场景吗?
答案 0 :(得分:0)
你误解了"工厂"和服务。
service()和factory()是在角度模块中注册新服务的两种方法。无论您选择何种方式,该服务将始终是一个单身人士。唯一的区别是Angular将如何创建服务。
如果您使用
app.service('foo', function() { ... });
angular将期望您传递的函数是构造函数。它将使用new
来调用构造函数,该函数将初始化' foo'这样服务:
this.someMethod = ...;
this.somOtherMethod = ...;
在这种情况下, this
是foo
服务。
如果您使用
app.factory('foo', function() { ... });
angular将期望您传递的函数成为工厂函数。即此函数的作用是返回作为foo
服务的对象。因此,该功能将执行类似
var service = {};
service.someMethod = ...;
service.someOtherMethod = ...;
return service;
在这两种情况下,angular只会调用构造函数或工厂一次且仅调用一次。这就是保证服务是单身人士的原因。创建/返回的对象将构成单例服务。