AngularJS提供商

时间:2015-10-01 18:49:28

标签: javascript angularjs angular-strap

我正在研究AngularJS的提供者,但我是AngularJS的初学者,并且在javascript方面经验不足。
我在查看AngularStrap代码,发现模态提供程序(src \ modal \ modal.js)返回一个函数而不是一个对象:

this.$get = function($window, $rootScope, $bsCompiler, $animate, $timeout, $sce, dimensions) {

    ...

    return ModalFactory;
};

为什么返回函数而不是具体对象 根据我的理解,在这种情况下,服务不能像单身人士一样,如果我错了,请纠正我。

2 个答案:

答案 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服务实例可以是anythingservice服务除外,因为它使用构造函数来创建具有new的对象。

第一次注入服务时,$get返回的值将保存为服务实例。在同一个应用程序中的所有后续依赖注入期间返回此实例,$get将不再被调用,这就是服务是单例的原因。