0

成功登錄到我的應用程序後,我想從api/js動態加載用戶可用的所有狀態。動態加載的狀態將始終包含抽象狀態app.module,它是唯一已知的狀態,並且是同一下載中所有其他狀態的根。動態加載UI路由器狀態

我的第一種方法是登錄後使用oc.lazyLoad。它工作正常,但不刷新瀏覽器時。然後我嘗試在module.run中使用oc.lazyLoad加載,但它不起作用。

我一直試圖將oc.lazyLoad與來自ui-router extras的futureState一起使用,但是我無法讓它工作。

我需要一些幫助,以便如何配置$futureStateProvider,如果它甚至可以做我想做的。

+0

你需要進一步調查ocLazyLoad,因爲你可以做你想做的事情。例如,在您的運行塊中:$ ocLazyLoad.load({type:'js',path:'js/libs/fastclick.min.js'})。then(function(){FastClick.attach(document.body); }) – user3791775

回答

2

不需要延遲加載。

用於添加動態狀態。我只需要在配置階段將狀態提供者引用添加到我的應用程序。

angular.module('app.module').config(function ($stateProvider, $urlRouterProvider) { 
     angular.module('app.module').$stateProvider = $stateProvider;   
     //send to login first 
     $urlRouterProvider.otherwise("/user/login");  
}); 

然後在用戶登錄成功後登錄服務,增加一些新聞狀態到狀態提供商。

loginSuccess(){ 
    $http.get('api/states/').then(function(states){ 
    bindStates(states); 
    }); 
} 

function bindStates(states) { 
    states.forEach(function bind(stateData) { 
     // add new states 
     angular.module('app.module').$stateProvider.state({ 
      name: stateData.name, 
      url: stateData.url, 
      template: stateData.template, 
      params: { 
       'pageId': null 
      }, 
      abstract: stateData.abstract 
     }); 
    }); 

    // go to default state 
    $state.go('main'); 
} 
+0

而當你已經登錄並刷新瀏覽器? –

+0

在我的情況下,下載的腳本不是json對象,而是帶有JavaScript代碼的字符串。 –

+0

刷新瀏覽器時,返回登錄頁面,檢查localStorage/cookies以確認用戶已被授權。通過登錄並再次調用loginSuccess。如果你想知道狀態用戶在刷新之前,使用$ routeChangeSuccess將其保存在localStorage中 –