2015-11-23 56 views
1

我正在使用angular.js,我試圖檢查會話是否在服務器端創建,如果不是,我想重定向到登錄頁面。在頁面呈現之前執行函數

問題是加載頁面後幾秒鐘發生重定向,但我想在頁面加載之前執行函數。

任何建議如何實現這一目標?

這裏是我的控制器:配置的控制器之前被執行

myPanel.controller('globalController', function($scope, $http){ 
    $http.get('../classes/login.php').then(function(response){ 
      $scope.isSession = response.data; 
      if($scope.isSession.isStarted === false){ 
       window.location = 'http://localhost/PDP/admin'; 
      } 
     }); 
}); 
+1

您使用的是ui路由器嗎? –

+0

用戶'resolve' http://www.undefinednull.com/2014/02/17/resolve-in-angularjs-routes-explained-as-story/ –

回答

4

使用run功能:

app.run(run) 

function run($http) { 
    $http.get('../classes/login.php').then(function(response){ 
     var isSession = response.data; 
     if(isSession.isStarted === false){ 
      window.location = 'http://localhost/PDP/admin'; 
     } 
    }); 
} 

然而,這將只運行一次。現在,如果你使用的是ui-router我們可以使用$stateChangeStart事件時的狀態變化如下運行這個功能:

//runs everytime when state changes 
function run($rootScope, $http, $state) { 
    $rootScope.$on('$stateChangeStart', function(event, toState, toParams, fromState, fromParams) { 
     //http get function here 
    }) 
} 

另一種使用情況是你想要這個功能只爲特定的狀態下運行。在這種情況下,使用resolve(只有當您使用ui路由器時):

.state('state_nam', { 
    resolve: { 
     access: ['$http', function($http) { 
      $http.get('../classes/login.php').then(function(response){ 
       var isSession = response.data; 
       if(isSession.isStarted === false){ 
        window.location = 'http://localhost/PDP/admin'; 
       } 
      }); 
     }] 
    } 
}) 
相關問題