2016-10-21 19 views
1

を動作しません:

$scope.submit = function(user) { 
    var request = { 
     method: 'POST', 
     url: 'http://localhost:9001/signIn', 
     headers: { 
      'Content-Type': 'application/json' 
     }, 
     data: { 
      "email": user.email, 
      "password": user.password, 
      "rememberMe": true 
     } 
    }; 
    $http(request).then(function(data) { 
      $location.path('/home'); 
    }, function(error) { 
     console.log(error); 
    }); 
}; 

ここに私の設定は次のとおりです。

app.config(function($urlRouterProvider, $stateProvider, $httpProvider, $authProvider) { 
    $urlRouterProvider.otherwise('/home'); 
    $stateProvider 
     .state('home', { 
      url: '/home', 
      templateUrl: '/home', 
      controller: 'HomeCtrl', 
      resolve: { 
       authenticated: function($q, $location, $auth) { 
        var deferred = $q.defer(); 

       if (!$auth.isAuthenticated()) { 
        $location.path('/signIn'); 
       } else { 
        deferred.resolve(); 
       } 

       return deferred.promise; 
      } 
     } 
    }) 
    .state('signIn', { 
     url: '/signIn', 
     templateUrl: '/signIn', 
     controller: 'SignInCtrl' 
    }); 
}); 

私はこれを試してみました:

$http(request).then(function(data) { 
     $scope.$evalAsync(function() { 
      $location.path('/home'); 
     }); 
     console.log(data); 
    }, function(error) { 
     console.log(error); 
    }); 

$location.path('/home'); 
$location.replace(); 

上記のいずれの作業も、いずれのヘルプも大変ありがとうございます。

+0

'$ http'リクエストは間違いなく成功していますか? '$ location'をコントローラに注入していますか?あなたの質問には示されていません。 –

+0

はい!私はアクセス許可に問題があると思います:/あなたの返事に感謝します – Rajeun

+0

あなたは何を得ていますか? – sisyphus

答えて

1

home がfalseを返すと、状態解決関数が$q.defer約束を解決または拒否できません。これにより、約束が掛かり、メモリリークが発生します。認証されていないとき

//ERRONEOUS CODE 
$stateProvider 
    .state('home', { 
     url: '/home', 
     templateUrl: '/home', 
     controller: 'HomeCtrl', 
     resolve: { 
      authenticated: function($q, $location, $auth) { 
       var deferred = $q.defer(); 

      if (!$auth.isAuthenticated()) { 
       $location.path('/signIn'); 
       //FAILS to resolve or reject promise 
      } else { 
       deferred.resolve(); 
      } 

      return deferred.promise; 
     } 
    } 
}) 

代わりに拒絶反応を返す:

$stateProvider 
    .state('home', { 
     url: '/home', 
     templateUrl: '/home', 
     controller: 'HomeCtrl', 
     resolve: { 
      authenticated: function($q, $location, $auth) { 
       //var deferred = $q.defer(); 

       if ($auth.isAuthenticated()) { 
        return $q.resolve("AUTHENTICATED"); 
       }; 

       //otherwise 
       return $q.reject("NOT AUTHENTICATED"); 
      }) 
     } 
}) 

リゾルバ機能が拒否された約束を返すと、状態変化が防止され、$stateChangeErrorイベントが$rootScopeで放送されます。

関連する問題