AngularJS - 在运行时创建工厂

时间:2014-01-27 06:23:16

标签: angularjs

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

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

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

                    return {
                        sayHello: sayHello
                    };
                }]);

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

 sensorService = $injector.get('CSensorRepositoryService');

我收到了错误

  

错误:[$ 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]);
            }
        }

当我试图采取“硬编码”的工厂时,一切都还可以 我做错了什么?

1 个答案:

答案 0 :(得分:6)

您可以通过从app.config公开提供程序来实现此目的......

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

然后在以后......

app.register.factory('myFactory',function(){...});

我只是确定这不会发生在可能重复出现的地方

这与提出的here概念相同。