AngularJS - 在运行时创建工厂

li-*_*raz 3 angularjs

我正在使用odata服务,我想为每个实体类型创建帮助服务,所以在获取元数据后,我正在创建工厂(这是在角度被引导之前完成的)

  var serviceName = allTypes[type].shortName + 'RepositoryService';
                angular.module('app').factory(serviceName, [function() {

                    function sayHello() {
                        console.log('hello');
                    }

                    return {
                        sayHello: sayHello
                    };
                }]);
Run Code Online (Sandbox Code Playgroud)

我试图在另一个控制器中使用它

 sensorService = $injector.get('CSensorRepositoryService');
Run Code Online (Sandbox Code Playgroud)

我收到了一个错误

错误:[$ injector:unpr]未知提供者:CSensorRepositoryServiceProvider < - CSensorRepositoryService

当迭代所有可用的工厂时,我看到这个工厂退出了

var mod = angular.module('app');
        for (var id in mod._invokeQueue) {
            if ((mod._invokeQueue[id])[1] === 'factory') {
                console.log( id + " " + ((mod._invokeQueue[id])[2])[0]);
            }
        }
Run Code Online (Sandbox Code Playgroud)

当我试图采取"硬编码"的工厂时,一切都很好,我做错了什么?

cal*_*oyd 6

你可以通过从app.config公开提供程序来做到这一点......

var app = angular.module('app',[]);
app.config(function($provide){
    app.register =
        {
            factory: $provide.factory,
            service: $provide.service,
            constant: $provide.constant
        };
});
Run Code Online (Sandbox Code Playgroud)

然后在以后......

app.register.factory('myFactory',function(){...});
Run Code Online (Sandbox Code Playgroud)

我只是确定这不会发生在可能反复发生的某个地方

这与此处介绍的概念相同.