2013-12-10 15 views
0

我想確定,如果我的應用程序仍然通過身份驗證,我的應用程序將檢查某些路徑。要做到這一點,我添加到我的路線:以承諾角度進行會話檢查

app.config(['$routeProvider', 
    function($routeProvider) { 
    $routeProvider. 
    when('/profile',{ 
      templateUrl: 'templates/user/profile.html', 
      controller: 'ProfileCtrl', 
      resolve: [ 'SessionCheck' ] 
    }). 
    ....... 

我有一個工廠,處理[ 'SessionCheck']

AppFactories.factory("SessionCheck", ['$http','$q','FlashService', 
    function($http,$q,FlashService) { 

    var def = $q.defer(); 
    var SessionStatus = $http.get('/sessioncheck', {cache: false}); 
    if(SessionStatus.success){ 
     def.resolve(); 
    }else{ 
     FlashService.show(SessionStatus.data.flash); 
     def.reject; 
    } 
    return def.promise; 

}]);

我可以看到鏈接被調用,但只有一次。每次我點擊具有resolve屬性的路由時,sessioncheck都不會發送到服務器....我已經嘗試將緩存置於false,但仍然存在。我究竟做錯了什麼?

+0

放入運行塊服務http://docs.angularjs.org/guide/module $ rootScope。$ on('$ routeChangeSuccess',function(){})只是爲了給你一個提示 – Whisher

回答

0

我懷疑問題是你如何使用解析器。嘗試是這樣的:

在工廠:

AppFactories.factory("SessionCheck", ['$http','$q','FlashService', function($http,$q,FlashService) { 

    return { 

    resolve: function() { 
     var def = $q.defer(); 
     var SessionStatus = $http.get('/sessioncheck', {cache: false}); 
     if(SessionStatus.success){ 
     def.resolve(); 
     }else{ 
     FlashService.show(SessionStatus.data.flash); 
     def.reject; 
     } 
     return def.promise; 
    } 
    }; 
}]); 

,並在路由器:

app.config(['$routeProvider', 
    function($routeProvider) { 
    $routeProvider. 
    when('/profile',{ 
      templateUrl: 'templates/user/profile.html', 
      controller: 'ProfileCtrl', 
      resolve: [ 'SessionCheck', function(sessionCheck) { 
        return sessionCheck.resolve(); 
      }] 
    }). 
    ....... 
+0

thx的答案,但我得到以下錯誤:錯誤:[$ injector:unpr] http://錯誤。 angularjs.org/1.2.3/$injector/unpr?p0=sessionCheckProvider%20%3C-%20sessionCheck – Tino