角度工厂 - 现实生活场景示例?

时间:2015-08-22 18:48:24

标签: angularjs angularjs-service angularjs-factory

在阅读了很多关于工厂和服务之间的差异之后,我想我终于得到了它,但是大多数文章说70%的时候我会使用工厂,这没有任何意义。为什么我想要一个场景,每个控制器/指令都有一个同一工厂的不同对象。

首先,我构建了一个简单的联系人列表网站和一个包含所有联系人的服务(非工厂)。对于需要它们的每个指令/控制器,我将注入服务并且所有将具有相同服务的相同实例,因此任何控制器/指令的任何更改都将具有最新的联系人,因为只有一个联系人数组在我的网站上。

您能告诉我需要实施工厂而不是服务的真实场景吗?

1 个答案:

答案 0 :(得分:0)

你误解了"工厂"和服务。

service()和factory()是在角度模块中注册新服务的两种方法。无论您选择何种方式,该服务将始终是一个单身人士。唯一的区别是Angular将如何创建服务。

如果您使用

app.service('foo', function() { ... });

angular将期望您传递的函数是构造函数。它将使用new来调用构造函数,该函数将初始化' foo'这样服务:

this.someMethod = ...;
this.somOtherMethod = ...;
在这种情况下,

thisfoo服务。

如果您使用

app.factory('foo', function() { ... });

angular将期望您传递的函数成为工厂函数。即此函数的作用是返回作为foo服务的对象。因此,该功能将执行类似

的操作
var service = {};
service.someMethod = ...;
service.someOtherMethod = ...;
return service; 

在这两种情况下,angular只会调用构造函数或工厂一次且仅调用一次。这就是保证服务是单身人士的原因。创建/返回的对象将构成单例服务。