0

내 앱에 성공적으로 로그인 한 후 사용자가 사용할 수있는 모든 상태를 api/js에서 동적으로로드하려고합니다. 동적으로로드 된 상태에는 항상 유일한 알려진 상태 인 추상 상태 app.module이 포함되며 동일한 다운로드의 다른 모든 상태에 대한 루트입니다.동적으로 UI 라우터 상태로드

내 첫 번째 접근 방식은 로그인 후 oc.lazyLoad를 사용하는 것이 었습니다. 그것은 잘 동작하지만 브라우저를 새로 고칠 때가 아닙니다. 그런 다음 module.run에서 oc.lazyLoad를 사용하여로드하려고했지만 작동하지 않았습니다.

나는 ui-router extras에서 futureState와 함께 oc.lazyLoad를 사용하려고 시도했지만 제대로 작동하지 않습니다.

내가 원하는 것을 수행 할 수 있다면 $futureStateProvider을 구성하는 방법에 대한 도움이 필요합니다.

+0

당신이 원하는 것을 할 수 있기 때문에 ocLazyLoad를 더 조사해야합니다. 예를 들어 run 블록에서 : $ ocLazyLoad.load ({type : 'js', 경로 : '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 객체가 아니라 자바 스크립트 코드가 포함 된 문자열입니다. –

+0

브라우저를 새로 고침 할 때 로그인 페이지로 돌아가서 localStorage/cookies를 체크하여 사용자에게 권한이 있음을 알립니다. 로그인을 통과하고 loginSuccess를 다시 호출하십시오. 상태 사용자가 새로 고침되기 전에 상태를 알고 싶다면 $ routeChangeSuccess와 함께 localStorage에 보관하십시오 –