为啥我应该在 AngularJS 中选择使用服务而不是工厂? [复制]

Posted

技术标签:

【中文标题】为啥我应该在 AngularJS 中选择使用服务而不是工厂? [复制]【英文标题】:Why should I choose using a Service over a Factory in AngularJS? [duplicate]为什么我应该在 AngularJS 中选择使用服务而不是工厂? [复制] 【发布时间】:2014-12-26 13:01:50 【问题描述】:

我知道这个问题已经被问过很多次了(实际上,很多次!),但我仍然无法完全理解这两者之间的主要区别是什么。

我知道 service 返回所提供函数的单例实例,而 factory 将简单地调用此函数并返回其值。

但是……

在我看来,您可以使用一种或另一种来实现并达到相同的效果,那么我应该如何选择使用哪一种呢?为什么我应该选择 services 而不是 factories,或者相反?

是否存在一个人可以做别人不能做的事情的情况?

【问题讨论】:

我知道那里所说的差异,但我要问的不是如何,而是为什么。为什么我应该选择一个而不是另一个?编辑了问题的标题以避免可能的混淆 所有的服务、提供和工厂都是单例的,你可以了解每一个的基础,然后决定最适合你的解决方案,这里没有一种尺寸适合所有 问题是我理解基本的区别,但我看不到一种可能的情况,即一个人可以做另一个人不能做的事情。考虑到这一点,我可以始终坚持一种方法,而永远不要使用另一种方法。这不是我想要的。 主要区别在于每个对象在发送实例之前都有自己的配置级别,我提到的问题的答案解释得很清楚 服务和工厂具有相同级别的配置。然而,提供者有一个更高级的。这就是为什么提供者不在我的问题之内,因为这是其他方法没有或无法完成的一件事。 【参考方案1】:

简而言之

如果您希望您的函数像普通函数一样被调用,请使用工厂。如果您希望使用 new 运算符实例化您的函数,请使用 service。如果您不知道区别,请使用工厂

来源:

网址:http://iffycan.blogspot.in/2013/05/angular-service-or-factory.html

详细说明

当您使用 service 时,您声明的变量和函数将被原型化为新对象,并且对象将返回给您。在 factory 中,它将按原样返回函数。

假设您创建了一个包含 10 个函数的服务,当您将其作为依赖项包含时,将创建新对象并且所有函数都将被原型化,请查看以下示例

function Gandalf() 
    this.color = 'grey';


Gandalf.prototype.comeBack = function() 
    this.color = 'white';

“this”将被返回。性能问题在这里可以忽略不计。

【讨论】:

这里肯定有我遗漏的东西,但我还是不明白为什么我会选择使用服务或工厂。工厂函数也可以返回一个对象:function() var color = 'grey'; return comeBack: function() color = 'white'; ; 他选择了一项服务,因为他为它提供了一个原型,一个新的对象。在 TypeScript、CoffeeScript 或 ES6 中,这将是一个类。它是一个用 new 关键字实例化的对象。

以上是关于为啥我应该在 AngularJS 中选择使用服务而不是工厂? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

为啥 AngularJS 在选择中包含一个空选项?

为啥我会像在 ng-file-upload 示例使用代码中那样在 AngularJS $timeout 服务中包装一个函数,而不会延迟?

为啥要使用 Express 而不是 AngularJS?

AngularJS:为啥在说“服务”时使用“工厂”?

为啥我们在 AngularJS 中使用 ng-style 而不是 style 进行 css 格式化?

为啥 AngularJS 应用程序不能在不同的服务器上使用 REST 服务?