angularjs中的.service()和.factory()提供程序调用之间有区别吗?
这(以及其他许多)指出,.factory和.service是不同于provider()功能的便利函数 但是,我看不出.service()和.factory()调用之间有任何区别(即:下面的测试通过)。有人能帮我理解我错过了什么吗。谢谢angularjs中的.service()和.factory()提供程序调用之间有区别吗?,angularjs,Angularjs,这(以及其他许多)指出,.factory和.service是不同于provider()功能的便利函数 但是,我看不出.service()和.factory()调用之间有任何区别(即:下面的测试通过)。有人能帮我理解我错过了什么吗。谢谢 angular.module('myMod', []) .service('myService', function() { return function() {return 33}; }) .factory('myFactory', fun
angular.module('myMod', [])
.service('myService', function() {
return function() {return 33};
})
.factory('myFactory', function() {
return function() {return 33};
});
describe('my app tests', function() {
beforeEach(module('myMod'));
it('services should work', inject(function(myService) {
expect(myService()).to.equal(33);
}));
it('factories should work', inject(function(myFactory) {
expect(myFactory()).to.equal(33);
}));
});
.factory
用于注册一个函数,该函数返回将作为注入服务单例的对象实例
.service
用于注册一个函数,该函数将用作注入服务单例的对象的构造函数
.service
实际上在封面下使用了.factory
。发件人:
换句话说,.service
注册一个调用$injector的工厂函数。在注册到.service
的函数(上面称为构造函数
)上实例化
现在,对于您的情况,您注册的函数是:
var fn = function(){ return function(){ return 13; }; }
fn
只返回一个对象(恰好是另一个函数)
在.factory
情况下,直接调用fn
:var svc=fn()代码>
在.service
的情况下,fn
像构造函数一样被调用,但最终没有在这个
上设置任何内容并返回一个对象(构造函数可以返回一个与这个
不同的实例)-与上面相同的函数对象。因此,var svc=$injector.instantiate(fn)
在这两种情况下,svc
都等于一个函数对象:function(){return 13;}
您似乎可以返回一个工厂函数或一个新的可启用函数。。但我想说的是:.service()调用的工作方式与.factory()调用的工作方式似乎没有任何实际区别。我将删除另一个注释上的结束语,这是对这个问题的极端看法:这个博客作者似乎误解了.service
、.factory
和.provider
的使用。到目前为止,我的理解是:*您可以在许多地方注入服务;每个都是相同的实例。服务不可参数化。*工厂是可参数化的,设计用于创建多个实例;控制器提供程序是工厂的示例。使用工厂时必须使用新的X()。
var fn = function(){ return function(){ return 13; }; }