我正在嘗試將登錄用戶從登錄頁面重定向到遠離登錄頁面(如果他們嘗試在應用程序中訪問它)。與登錄頁面關聯的控制器 - Login_controller
調用授權服務中的功能 - Authorisation_service.isLoggedIn()
。如果此服務返回true,則應將用戶重定向到登錄的概述頁面。AngularJS - 控制器不等待條件語句中的服務返回值
通過記錄到控制檯我可以看到,在服務返回true之前,條件語句已經聲明從服務返回的值是未定義的。之後服務確實會恢復正常,但已爲時過晚。
如何讓控制器的條件語句等待服務的返回值?
Authorise_service.js
myApp.factory('Authorise', ['User', '$http', '$location', '$rootScope', function(User, $http, $location, $rootScope) {
return {
isLoggedIn: function() {
if(((sessionStorage.username && sessionStorage.authKey) && (sessionStorage.username !== "null" && sessionStorage.authKey !== "null")) || ((localStorage.username && localStorage.authKey) && (localStorage.username !== "null" && localStorage.authKey !== "null"))) {
if(sessionStorage.username) {
var usernameLocal = sessionStorage.username;
var authKeyLocal = sessionStorage.authKey;
} else {
var usernameLocal = localStorage.username;
var authKeyLocal = localStorage.authKey;
}
//pass to server
var user = User.query({ usernameLocal: usernameLocal, authKeyLocal: authKeyLocal }, function(user) {
if(user.loginSuccess === 1) {
return true;
} else {
return false;
}
});
} else {
return false;
}
}
};
}]);
Login_controller.js
myApp.controller('Login_controller', function(Authorise, $scope, $location) {
if(Authorise.isLoggedIn() === true) {
console.log("Authorise.isLoggedIn() = true");
$location.path('/teach/overview');
}
});
感謝您的詳盡回覆和教程鏈接非常有用 – Fisu 2013-03-08 13:09:31
很高興能幫助您,先生! – 2013-03-10 15:13:37