在bootstrap之后从非angularAMD模块加载工厂

时间:2014-04-08 21:10:18

标签: angularjs requirejs

在这个plunker(http://plnkr.co/edit/IpewSU)中,我创建了一个工厂'LoggerFactory',它在模块'webapp'中注册。工厂用于控制器'logCtrl'。如果路由是'/ log',则在bootstrap之后加载此控制器。有一个模块'LoggerModule',LoggerFactory应该属于这个模块而不是'webapp'。

当我在引导之前加载工厂时(例如在'webapp'中添加依赖项)我可以在该模块中创建工厂。 Plunker:http://plnkr.co/edit/Fn6rxg

但是在使用它之前加载工厂对于大型应用程序来说不是解决方案......

我缺少什么?是否需要在自己的模块中创建每个工厂以及何时:如何将此模块注入另一个已经引导的模块?

1 个答案:

答案 0 :(得分:0)

目前我正在使用此解决方案在angularAMD app中将元素注册到外部模块:

// bind submodules to register their functions here
app.run(function() {
    var bindRegister = function(module, type) {
        return function() {
            module.register[type].apply(null, arguments);
            return module['_'+type].apply(null, arguments);
        };
    };

    var t, type, types = ['controller','factory','directive','filter','service','constant','value','animation'];
    var m, module, modules = ['AccountModule', 'NoticeModule'];
    for (m in modules) {
        module = angular.module(modules[m]);
        module.register = app.register;
        for (t in types) {
            type = types[t];
            if (typeof(module[type]) == 'function') {
                module['_'+type] = module[type];
                delete module[type];
                module[type] = bindRegister(module, type);
            }
        }
    }
});