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中 –