AngularJS 供应商
AngularJS Providers
我正在研究 AngularJS 的提供商,但我是 AngularJS 的初学者,在 javascript 方面经验不足。
我正在查看 AngularStrap 代码,发现模态提供程序 (src\modal\modal.js) returns 是一个函数而不是对象:
this.$get = function($window, $rootScope, $bsCompiler, $animate, $timeout, $sce, dimensions) {
...
return ModalFactory;
};
为什么返回的是函数而不是具体对象。
以我的理解,在这种情况下,服务不能像单例一样,如果我错了请指正。
因为工厂只是return一个对象的函数。
表格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);
}]);
}
Angular 服务实例可以是 anything(service
服务除外,因为它使用构造函数创建具有 new
的对象)。
第一次注入服务时,$get
返回的值保存为服务实例。此实例在同一应用程序内的所有后续依赖项注入期间返回,$get
不会再次调用,这就是服务是单例的原因。
我正在研究 AngularJS 的提供商,但我是 AngularJS 的初学者,在 javascript 方面经验不足。
我正在查看 AngularStrap 代码,发现模态提供程序 (src\modal\modal.js) returns 是一个函数而不是对象:
this.$get = function($window, $rootScope, $bsCompiler, $animate, $timeout, $sce, dimensions) {
...
return ModalFactory;
};
为什么返回的是函数而不是具体对象。
以我的理解,在这种情况下,服务不能像单例一样,如果我错了请指正。
因为工厂只是return一个对象的函数。
表格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);
}]);
}
Angular 服务实例可以是 anything(service
服务除外,因为它使用构造函数创建具有 new
的对象)。
第一次注入服务时,$get
返回的值保存为服务实例。此实例在同一应用程序内的所有后续依赖项注入期间返回,$get
不会再次调用,这就是服务是单例的原因。