2016-08-16 50 views
0

這裏是場景:是否可以讓AngularJS中的子模塊使用ui-router控制他們自己的路由?

我有一個主要的AngularJS應用程序,使用ui路由器的路由,就像任何其他應用程序。我還有一個更小的AngularJS模塊,它可以作爲自己的應用程序,而不需要它是我的大型應用程序的子模塊。

我希望較小的應用程序也可以處理自己的路由和模板。目標是,迷你應用可以由另一個AngularJS應用加載,或者自行加載,並且已經設置了所有的路由和模板。

主要應用:

angular 
    .module('mainApp') 
    .config(['$stateProvider', function($stateProvider) { 
     $stateProvider 
     .state('mainAppParent', { 
      url: '/', 
      templateUrl: 'main.html', 
      controller: 'mainCtrl', 
      controllerAs: 'vm' 
     }) 
     .state('mainAppParent.miniJournalApp', { 
      url: '/journal' 
     }); 
    }]); 

迷你程序:

angular 
    .module('miniJournalApp') 
    .config(['$stateProvider', function($stateProvider) { 
     $stateProvider 
     .state('mainJournalState', { 
      url: '/', 
      templateUrl: 'mainJournalView.html', 
      controller: 'JournalCtrl', 
      controllerAs: 'vm' 
     }) 
     .state('newEntry', { 
      url: '/new' 
     }); 
    }]); 

我打算在具有迷你應用程序是一個AngularJS .component()的所有組成部分,所以我想知道這樣做的正確方法是讓父應用程序處理路由,並在我定義每個組件/指令時讓迷你應用程序處理模板。然後,當我想自行加載迷你應用程序時,我只需使用新的路由編寫一個封裝AngularJS模塊。

回答

1

正如我們所看到的,在角度ui路由器中,我們使用$ stateProvider,所以基本上我們使用的是提供者。

在一個角度應用程序中,提供程序加載一次,然後角度將實例放入緩存中,以便下一次將提供程序注入某個位置時使用相同的實例。

由於在角度應用程序中使用$ stateProvider的相同實例,因此爲子模塊定義單獨的狀態是完全正確的。

這是一個很好的代碼維護實踐。我在很多項目中使用過它

相關問題