2014-10-30 66 views
3

我知道这已经被问了很多次了(其实很多!),但是我仍然无法完全理解这两者之间的区别是什么。为什么我应该选择在AngularJS中使用工厂服务?

我知道一个服务返回所提供的功能的单一实例,以及一个工厂将简单地调用这个函数返回其值。

但是......

在我看来,你可以做,并实现使用一种或另一种相同的效果,所以我应该如何选择使用哪一个?为什么我应该选择服务超过工厂,或以其他方式?

有没有这样一种情况,一个人可以做一些其他人不能做的事情?

+0

我意识到在那里陈述的不同,然而我所问的不是* how *,而是* why。为什么我应该选择一个呢?编辑问题的标题,以避免可能的困惑 – 2014-10-30 13:42:25

+0

所有的服务,提供和工厂是单身人士,你可以了解每个人的基本知识,然后决定什么是最适合你的解决方案,这里没有人适合这里 – 2014-10-30 13:44:38

+0

问题是我理解基本的区别,但我不能看到一个可能的情况,当一个人可以做一些其他人不能做的事时。考虑到这一点,我总是可以坚持一种方法,而不要使用另一种方法。这不是我想要的。 – 2014-10-30 13:46:35

回答

3

简而言之

如果你想让你的函数像普通函数一样被调用,请使用factory。如果你希望你的函数被新运算符实例化,请使用service。如果你不知道其中的差别,使用厂家

来源:

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

详解

当您使用的服务,您声明变量和函数将原型将新的对象和对象返回给你。在工厂中,它将按照原样返回功能。

比方说,您创建了一个服务,10个功能,当你把它作为依赖,新的对象将被创建,所有功能将被原型,检查例如

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

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

下面的“这”将被退回。性能问题在这里可以忽略不计。

+0

必须有一些我在这里失踪,但我仍然不明白为什么我会选择使用服务或工厂。工厂的函数也可以返回一个对象:'function(){var color ='gray'; return {comeBack:function(){color ='white'; }}; }' – 2014-10-30 13:40:03

+1

他选择了一个服务,因为他正在为它提供一个原型,一个新的对象。在TypeScript,CoffeeScript或ES6中,这将是一个类。它是一个用new关键字实例化的对象。 – Martin 2014-10-30 14:09:35