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

Posted

技术标签:

【中文标题】AngularJS:为啥在说“服务”时使用“工厂”?【英文标题】:AngularJS : why use "factory" when you say "services"?AngularJS:为什么在说“服务”时使用“工厂”? 【发布时间】:2014-08-08 04:09:48 【问题描述】:

这可能是一个愚蠢的问题,也许只是关于措辞。 我正在学习 AngularJS 并阅读了很多文章,我看到了一个奇怪的事情发生。 很多人说“使用服务”,但在代码中他们使用“工厂”代替。

例如,这些问题: Pass variables to AngularJS controller, best practice?, Angularjs sharing methods between controllers

为什么人们说'A'并使用'B',你不能只说“你可以使用工厂”吗? 我问这个问题是因为我看到它不止几次,这让我感到困惑......服务和工厂是两个不同的东西,对吧?

【问题讨论】:

看到这个viralpatel.net/blogs/angularjs-service-factory-tutorial 您会在此处找到一个非常相似的问题并提供非常详尽的答案:***.com/a/23683176/154480 这个答案前段时间帮助了我:***.com/a/15666049/3675149 【参考方案1】:

除了一个是新的而另一个不是之外,两者之间确实没有区别。除此之外,它们都是单例和可注射的。您也可以以几乎相同的方式使用它们。

我也和你一样困惑,但由于相似性,我现在倾向于互换使用这个术语。

【讨论】:

【参考方案2】:

我认为单词可以互换的原因归结为它们之间的相似性。在大多数对话的背景下,您对其中一个话题的看法几乎不会适用于另一个话题。只要记住这一点,更重要的是了解其中的区别,它看起来会不那么混乱。

请参阅下面的问题以获得有关差异的详细解释(cmets 中的其他良好参考资料)。

confused about service vs factory

【讨论】:

【参考方案3】:

工厂是实际创建您的服务的地方;无论如何,它最终都会成为一项服务。在 AngularJS 中,您可以通过三种方式声明服务;使用value,它几乎可以创建一个静态服务实例;使用factory,它允许您在创建它之前对其进行配置;使用provider,它甚至可以让您覆盖依赖项。

请参阅我对您问题的评论中的相关问题,如果您查看其源代码,您还可以找到有关 AngularJS 文档 (https://docs.angularjs.org/guide/services) 的详细信息。

为了简单起见,这与您不会在另一个上下文中对“构造函数”和“实例”使用相同的词的原因相同。

【讨论】:

那么我能说“工厂”是一个构造函数,我们称它的实例为“服务”吗? 不完全是,但你明白了。由于服务始终是单例的,所以不一样;让事情变得更复杂一点,你的服务 * 可以 * 是一个构造函数(它是 javascript!你的服务可以是一个对象、一个字符串、一个函数......) - 最后,服务对象本身,不管它是什么, 将由工厂创建。

以上是关于AngularJS:为啥在说“服务”时使用“工厂”?的主要内容,如果未能解决你的问题,请参考以下文章

AngularJS:为啥人们更喜欢工厂在控制器之间共享数据[重复]

AngularJS:何时使用服务而不是工厂

AngularJS:何时使用服务而不是工厂

AngularJS:工厂和服务? [复制]

angularjs 服务、供应商和工厂? [复制]

angular js:是不是需要在模块文件中加载所有控制器和工厂/服务