2016-03-29 138 views
1

我有幾個模塊,我嘗試在運行時根據一些條件加載。目前我正在使用ocLazyLoad模塊,但是我所加載的模塊根本不工作。一切正常,沒有錯誤被拋出。在運行時使用/不使用ocLazyLoad加載角度模塊

我首先聲明我的主模塊

var app = angular.module('myApp',['oc.lazyLoad']) 

app.config(['$ocLazyLoadProvider',function(){ 
    modules : [{ 
     name : 'mod1', 
     files : [CDN-Path] 
    }] 
}]); 

,然後在我的控制器某處

app.controller('c',function($ocLazyLoad){ 

    $ocLazyLoad.load('mod1').then(function(){ 
      console.log('module loaded!'); 
    }); 
}) 

我真正的解決了諾里做的是我註冊的UI路由器一個新的狀態,在該狀態下,我使用了mod1中定義的一些指令,但它們根本不起作用。模塊加載後是否需要進行進一步的初始化?

回答

1

您可以延遲加載任何模塊/指令/控制器/視圖如下之前的JavaScript(的jquery以及):

angular.module('app', ['ui.router', 'oc.lazyLoad']).config(['$stateProvider', '$ocLazyLoadProvider', function ($stateProvider, $ocLazyLoadProvider) { 
     $ocLazyLoadProvider.config({ 
      modules : [{ 
        name : 'TestModule', 
        files : ['js/TestModule.js', 'js/AppCtrl.js'] 
       } 
      ] 
     }); 

     $stateProvider.state('index', { 
      url : "/", // root route 
      views : { 
       "lazyLoadView" : { 
        controller : 'AppCtrl', // This view will use AppCtrl loaded below in the resolve 
        templateUrl : 'partials/main.html' 
       } 
      }, 
      resolve : { // Any property in resolve should return a promise and is executed before the view is loaded 
       loadMyCtrl : ['$ocLazyLoad', function ($ocLazyLoad) { 
         // you can lazy load files for an existing module 
         return $ocLazyLoad.load('TestModule'); 
        } 
       ] 
      } 
     }); 
    } 
]); 

https://oclazyload.readme.io/docs/with-your-router

編輯Plunker樣品與controllerui-bootstrap延遲加載:https://plnkr.co/edit/pUq3b1TDkwdGQOftcWDL?p=preview

+0

我讀過這個,但這裏的問題不是模塊沒有加載ING。他們加載和註冊,我可以'angular.module('mod1')'並檢索它,問題是他們不被添加爲當前模塊的依賴項。爲了能夠從新註冊的模塊 –

+0

添加實現功能的新元素(例如指令),我只是試了一下,以防萬一我可能錯過了某些東西,並且它以相同的方式迴應 –

+0

我有一個plunker示例,希望它可以幫助:) –