在angular.js中将工厂函数包含在$ provide.factory中后,无法调用工厂方法

时间:2018-09-22 03:59:03

标签: angularjs angularjs-factory

contentsRect

factory.js

app.config(['$controllerProvider','$compileProvider', '$filterProvider', '$provide',function($controllerProvider,
        $compileProvider, $filterProvider, $provide) {
        app.register = {
          controller: $controllerProvider.register,
          directive: $compileProvider.directive,
          filter: $filterProvider.register,
          factory: $provide.factory,
          service: $provide.service
        };
      }
]);

app.controller('myCntrl', ['$scope', function($s) {
   app.register.factory('customFactory',[customFactory]);
   customFactory.init();
 });

在这里,我将在运行时中添加factory.js文件,现在需要在控制器中注入自定义工厂。因此,我使用了 $ provide.factory 方法。但是,我无法在 customFactory

中调用 init()函数

1 个答案:

答案 0 :(得分:1)

在动态注册customFactory的控制器中,customFactory名称绑定只是一个函数。要在您提到的位置调用init(),您需要将customFactory作为函数调用。

customFactory().init();

但是,如果您在其他地方(例如控制器)还有其他需要依靠customFactory的食谱,那么您可以按预期访问init()

app.controller('anotherCtrl', ['customFactory', function (customFactory) {
    customFactory.init();  // OK!
}]);

customFactory被注册时,AngularJS依赖注入器知道如何将其创建为单例,随后您就可以将其作为值来访问。