Javascript AngularJS-控制器应该调用服务还是工厂?

Javascript AngularJS-控制器应该调用服务还是工厂?,javascript,angularjs,Javascript,Angularjs,当angular控制器需要调用某些逻辑时,比如调用web API,该逻辑可以封装在angular服务或工厂中。(还有其他选择,但这对于服务和工厂之间的区别并不重要。) 我只是在谷歌上搜索了一下,有很多文章和视频解释了什么是服务和工厂。这些文章和视频没有解释使用哪一个以及为什么。所以,如果我在angular controller中编写代码,并且我想使用工厂或服务,我应该使用哪一个,为什么 我不关心它们是如何工作的,它们中至少有一个是单例的,一个是返回函数的实例,一个是与新关键字blah一起使用的

当angular控制器需要调用某些逻辑时,比如调用web API,该逻辑可以封装在angular服务或工厂中。(还有其他选择,但这对于服务和工厂之间的区别并不重要。)

我只是在谷歌上搜索了一下,有很多文章和视频解释了什么是服务和工厂。这些文章和视频没有解释使用哪一个以及为什么。所以,如果我在angular controller中编写代码,并且我想使用工厂或服务,我应该使用哪一个,为什么

我不关心它们是如何工作的,它们中至少有一个是单例的,一个是返回函数的实例,一个是与新关键字blah一起使用的

服务和工厂似乎都以相同的方式使用和调用。那么,有人能解释一下,在哪种情况下,我会使用一个而不是另一个,以及为什么?这有关系吗

**编辑**

建议的可能答案指出:

你可以用这两者完成同样的事情。然而,在某些情况下 工厂为您提供了更大的灵活性来创建 可以使用更简单的语法进行注入。那是因为 myInjectedService必须始终是对象,myInjectedFactory可以是 对象、函数引用或任何值


如果是这样,那么我的问题确实得到了回答。但如果是这样的话,我会很高兴知道的。这是在服务上使用工厂的唯一原因吗?

如果对象定义语法更可取,请使用
工厂

app.factory('factory', function () {
    ...
    return {
        value: '...'
    };
});
app.service('service', function () {
    this.value = '...';
});
或者由于某种原因,它返回的东西不是对象

如果
语法更可取,请使用
服务

app.factory('factory', function () {
    ...
    return {
        value: '...'
    };
});
app.service('service', function () {
    this.value = '...';
});
或者它应该从另一个构造函数返回使用
new
创建的对象,例如

app.factory('factory', function () {
    return new someConstructor();
});
vs

service
的一个很好的用例是,您可以使用
controllerAs
语法无缝地重构现有控制器,以从公共服务继承,在这种情况下,不需要替换
语句:


有一些很好的写作,答案就在于你不关心的所有东西(它们是如何工作的,等等)。最后,它们都产生了相同的东西:一个单例对象,您可以将它注入到其他应用程序组件中。因为它们产生相同的结果,所以你使用哪一个并不重要。@JoePontani我发现所有这些文章的问题是,在内部有很多关于两者之间差异的解释。他们中的大多数人都没有从打电话者的角度谈论使用哪一个。我想最好有一个位置,在那里有人删掉所有细节,然后说:“在这个例子中使用这个。这就是为什么……”问题是这个问题和另一个问题问的是同一件事。它甚至有文本“应该用于什么(假设它们做不同的事情)?”。什么是“对象定义语法”?
{value:''.'''}
-与逐个定义
属性相反,如
此.value='.''.