会话检查角度与承诺

时间:2013-12-10 20:34:16

标签: angularjs promise

我想确保我的应用程序检查某些路径是否仍然经过身份验证。要做到这一点,我添加到我的路线:

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,但仍然。我做错了什么?

1 个答案:

答案 0 :(得分: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();
            }]
    }).
    .......