2017-08-24 15 views
1

我试图逐步加载模块。我创建了一个文件'lazyModule.js',并使用oclazyLoad加载这个模块。当我在这个lazyModule.js定义myModule.js依赖,洒在控制台以下错误:无法初始化ocLazyLoad错误,但在一个延迟加载的模块中包含依赖关系

无模块引导过程中发现,无法初始化ocLazyLoad。当您使用ocLazyLoad时,您应该始终使用ng-app指令或angular.boostrap。

lazyModule.js

define([ 
    'angular', 
    'components/infrastructure/myModule' 
], function(angular) { 
    'use strict'; 
    return angular.module('lazyModule', 
     [ 
      'myModule' 
     ]); 
}); 

myModule.js

define([ 
    'angular', 
    'ui-bootstrap', 
    'ocLazyLoad' 
], function initModule(angular) { 
    'use strict'; 

    angular.module('html.myModule', [ 'oc.lazyLoad']); 
}); 

这是怎么了延迟加载lazyModule.js:

initializeLazyModule: function(scope) { 
       var template; 
       try{ 
        // checking for existing module 
        angular.module('lazyModule'); 
        isLoaded=true; 
       }catch(err) { 
        isLoaded=false; 
       } 
       if (!isLoaded) { 
        return require(['apps/controlCenter/lazyModule'], function() { 
         $ocLazyLoad.inject('lazyModule'); 
         ControlCenterUtilities.checkAndApplyScope(scope); 
         $compile($('#my-module'))(scope); 

        }); 
    } 

    else { 
        return; 
    } 
} 

虽然,当我从myModule.js中删除oc.lazyLoad模块的依赖项时,控制台错误消失。

但我没有选择从myModule中删除oc.lazyload模块依赖项,因为它会中断一些其他组件直接消耗我的模块而不需要加载oclazyload。

它基本上是因为oc.lazyload模块被注入两次而发生的。 请帮忙

+0

我已经找到解决这个。 oc.lazyLoad不应包含在新角度模块创建的角度依赖性中 \t \t \t如果oc.lazyLoad已通过引导角度模块加载。 \t \t \t oc.lazyLoad尝试初始化自己,只要它包含在新的模块依赖项中。 lazyModule.js – jass

回答

0

我找到了解决方案。

如果oc.lazyLoad已经通过自举角度模块加载,oc.lazyLoad不应包含在新角度模块创建的角度依赖性中。 oc.lazyLoad只要包含在新模块依赖项中就尝试初始化自身。

lazyModule.js

define([ 
     'angular', 
     'components/infrastructure/myModule' 
    ], function(angular) { 
     'use strict'; 
     var dependentModules = [ 
     try { 
      angular.module('oc.lazyLoad'); 
     } catch (moduleError) { 
      dependentModules.push('oc.lazyLoad'); 
     } 
     return angular.module('lazyModule', dependentModules); 
    });