我正在研究AngularJS的提供者,但我是AngularJS的初学者,并且在javascript方面经验不足。
我在查看AngularStrap代码,发现模态提供程序(src \ modal \ modal.js)返回一个函数而不是一个对象:
this.$get = function($window, $rootScope, $bsCompiler, $animate, $timeout, $sce, dimensions) {
...
return ModalFactory;
};
为什么返回函数而不是具体对象 根据我的理解,在这种情况下,服务不能像单身人士一样,如果我错了,请纠正我。
答案 0 :(得分:1)
因为工厂只是返回对象的函数。
表格angularJS代码:
function factory(name, factoryFn) {
return provider(name, { $get: factoryFn }); //<------ juste called, not newed.
}
function service(name, constructor) {
return factory(name, ['$injector', function($injector) {
return $injector.instantiate(constructor);
}]);
}
答案 1 :(得分:1)
Angular服务实例可以是anything(service
服务除外,因为它使用构造函数来创建具有new
的对象。
第一次注入服务时,$get
返回的值将保存为服务实例。在同一个应用程序中的所有后续依赖注入期间返回此实例,$get
将不再被调用,这就是服务是单例的原因。