2017-11-15 7 views
0

ログインが成功した後、私はlogin状態からhome状態に移行することになっています。 homeの前、またはログインした後にアクセス可能な他のどの状態も、コントローラの前に特権/アクセスデータがロードされていることを確認しながら、いくつかのresolveメソッドを起動します。これを行うために、私は解決で抽象親状態を作成し、login子状態以外のすべての状態を作りました。ui-routerは抽象的な親から子状態に移行しません

コントローラが$state.go('home')を起動すると、$stateChangeStartイベントがトリガされますが、その後にアプリケーションが消えているように見えます。 $stateChangeSuccessは実行されません。コードをステップ実行すると、$stateChangeStartの後にデバッガを終了するだけです。状態は変更されていません(まだログインページにあります)。エラーメッセージは表示されません。思考/希望私は、いくつかの簡単な構成が不適切に設定されています。

config.jsの

$urlRouterProvider.otherwise('/home'); 
    $stateProvider 
     .state('/', { 
      templateUrl: 'app/components/home/home.html', 
      controller: 'HomeController', 
      controllerAs: 'vm', 
      parent: 'app', 
      authenticate: true, 
      data:{ 
       rule: function($rootScope){ 
        return true; 
       } 
      }      
     }) 
     .state('login', { 
      url: '/login', 
      templateUrl: 'app/components/login/login.html', 
      controller: 'LoginController', 
      controllerAs: 'vm', 
      reloadOnSearch: false, 
      authenticate: false, 
      params: { 
       'passwordResetSuccess': '' 
      } 
     }) 
     .state('forgotPassword', { 
      url: '/forgotPassword', 
      templateUrl: 'app/components/login/forgotPassword.html', 
      controller: 'ForgotPasswordController', 
      controllerAs: 'vm', 
      authenticate: false, 
      params: { 
       'username':'' 
      } 
     }) 
     .state('app', { 
      url:'', 
      abstract: true, 
      template: '<div ui-view class="slide-animation"></div>', 
      resolve:{ 
       privilege: ['privilegesService', function(privilegesService){ 
        return privilegesService.getPrivileges().then(privilegesService.privilegesData) 
                  .catch(privilegesService.getPrivilegesError); 
       }], 
       alarms: ['alarmsService', function(alarmsService){ 
        return alarmsService.setAlarms(); 
       }], 
       firmsData: ['chosenFirmService', function(chosenFirmService){ 
        return chosenFirmService.getFirmsData(); 
       }], 
       notifications: ['notificationsService', function(notificationsService){ 
        return notificationsService.setupGlobalAccess(); 
       }], 
       releaseNotes: ['releaseNotesService, $rootScope', function(releaseNotesService, $rootScope){ 
        $rootScope.loadNotificationData(); 
        releaseNotesService.setupGlobalAccess(); 
        return; 
       }], 
       setIdle: ['Idle', function(Idle){ 
        Idle.watch(); 
        Idle.setIdle(15*60); 
        return; 
       }] 
      } 
     }) 
     .state('home', { 
      url: '/home', 
      templateUrl: 'app/components/home/home.html', 
      controller: 'HomeController', 
      controllerAs: 'vm', 
      parent: 'app', 
      authenticate: true, 
      data:{ 
       rule: function($rootScope){ 
        return true; 
       } 
      }     
     }) 

app.route.js

$rootScope.$on("$stateChangeStart", function (event, toState, toParams, fromState, fromParams) { 
     $('[data-toggle="popover"]').popover('hide'); 

     ////////////////// 
     //Check for auth key if missing redirect to login 
     ///////////////// 
     if(toState.authenticate){ 
      if(authService.authKeyExists()){ 
       var authorized = toState.data ? toState.data.rule ? toState.data.rule($rootScope) : true : true; 
       if(authorized){ 
        if(toState.url.indexOf("/add") > -1){ 
         $rootScope.selectedFirmId = null; 
        } else { 
         $rootScope.selectedFirmId = $rootScope.cachedFirmId; 
        } 
        var navigateFromString = fromState && fromState.name ? "Navigated from " + fromState.name + " to " : "Started from "; 
        navigationService.addNavObject("activity", { 
         summary : "Page navigation", 
         activity : navigateFromString + toState.name, 
         page : $location.absUrl().replace("#/", ""), 
         level : "debug" 
        }); 
       } else { 
        $state.go('home'); 
       } 
      } else { 
       event.preventDefault(); 
       $state.go('login'); 
      } 
     } 
    }); 

    // Hack because ui-router doesn't save previous $state 
    $rootScope.$on('$stateChangeSuccess', function(event, toState, toParams, fromState, fromParams){ 
     if(fromState.name){ 
      $state.lastKnownState = {}; 
      $state.lastKnownState.name = toState.name; 
      $state.lastKnownState.params = toParams; 
      $state.previousState = {}; 
      $state.previousState.name = fromState.name; 
      $state.previousState.params = fromParams; 
     } 
    }); 

index.htmlを

<div class="slide-animation-container"> 
    <div ui-view id="ng-view" class="slide-animation"></div> 
    {{scrollTo}} 
</div> 

答えて

0

これは明らかに起因しています解決のために$rootScopeを含めることになる。この依存関係を削除すると、アプリが読み込まれるようになります。

関連する問題