2014-06-17 67 views
1

我有一個大的AngularJS應用程序被分成不同的功能模塊。它目前被捆綁到一個JavaScript文件中,因此所有的模塊都在初始頁面加載時加載。我想按功能區域拆分捆綁包,並在用戶到達某些特定點(視圖)時按需加載應用程序的某些部分。

我已經在RequireJS和ocLazyLoad幫助下整理出了捆綁和延遲加載。儘管如此,還有最後一件事需要解決。每個模塊都定義了自己的路由,所以如果我不會在初始加載時加載它,那麼它的路由將不確定,直到用戶到達觸發加載模塊的點。

問題是可以通過簡單地粘貼它的URL直接到達缺少的路由,在這種情況下,AngularUI路由器將發出$ stateNotFound事件。我有一個處理程序,它將檢查請求的URL並加載適當的模塊(以及缺少的路線)。最後一個缺失的部分是,在模塊和路線加載之後,重試路線。有誰知道如何實現這一目標?有一個在AngularUI路由器的常見問題一節,是爲了解釋這一點,但它不是在充滿

回答

1

你或許應該使用$ urlRouterProvider的「當」的功能,而不是受涼$ stateNotFound事件:

$urlRouterProvider.when('/myUrl', ['$match', '$state', function($match, $state) { 
    // do something, check for module loaded for example 
    // ... and then transitionTo 
    $state.transitionTo(state, $match); 
}]); 

延遲$ state.transitionTo直到您想要(例如預加載模塊之後)。

但是,如果你真的想使用$ stateNotFound你可以這樣做:

$rootScope.$on('$stateNotFound', function(event, unfoundState, fromState, fromParams){ 
    event.preventDefault() 
    // do your module load 
    // ... and then transitionTo 
    $state.transitionTo(unfoundState.to, unfoundState.toParams, unfoundState.options); 
})