0

После успешного входа в мое приложение я хочу динамически загружать все состояния, доступные пользователю от api/js. Динамически загруженные состояния всегда будут включать абстрактное состояние app.module, которое является единственным известным состоянием и которое является корнем для всех других состояний в одной и той же загрузке.Загрузите состояние ui-router динамически

Мой первый подход заключался в использовании oc.lazyLoad после входа в систему. Он работал нормально, но не при обновлении браузера. Затем я попытался загрузить с помощью oc.lazyLoad в module.run, но это не сработало.

Я пытался использовать oc.lazyLoad вместе с futureState из дополнительных компонентов ui-router, но я не могу заставить его работать.

Мне нужна помощь в том, как настроить $futureStateProvider, если это возможно даже для того, чтобы сделать то, что я хочу.

+0

Вам необходимо исследовать ocLazyLoad дальше, потому что вы можете делать то, что хотите. Например, в вашем блоке запуска: $ ocLazyLoad.load ({type: 'js', path: 'js/libs/fastclick.min.js'}), затем (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, чтобы узнать, что пользователь авторизовался. Перейдите в login и снова войдите в loginSuccess. Если вы хотите знать, что пользователь состояния находится перед обновлением, сохраните его в localStorage с помощью $ routeChangeSuccess –