动态加载ui-router状态

时间:2016-06-10 14:06:30

标签: angularjs angular-ui-router angular-ui-router-extras oclazyload

成功登录我的应用后,我想从api/js动态加载用户可用的所有状态。动态加载的状态将始终包含抽象状态app.module,它是唯一已知状态,并且是同一下载中所有其他状态的根。

我的第一个方法是在登录后使用oc.lazyLoad。它工作正常,但在刷新浏览器时却没有。然后我尝试在module.run中使用oc.lazyLoad加载,但它没有用。

我一直在尝试将oc.lazyLoad与来自ui-router extras的futureState一起使用,但我无法让它工作。

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

1 个答案:

答案 0 :(得分:2)

Dont need lazy load.

For adding dynamic states. I just need add state provider reference to my app at config phase.

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

then in login service after user login success, add some news states to states provider.

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');
}