gpt4 book ai didi

javascript - Angular JS 工厂变量未定义

转载 作者:太空宇宙 更新时间:2023-11-04 16:13:16 24 4
gpt4 key购买 nike

我一直在尝试创建一个脚本,使用 Angular JS 从 PHP API 获取 session 数据来创建身份验证。

我创建了一个名为 User 的工厂,并在我的 loginController 中使用 User.Initialise() 来检查 PHP 中的 session 是否已附加一个user_id

当在我的 loginController 中使用 User.Initialise() 时(在我的 session 中,我的 session 附加了一个用户),它将使用 $location.path ("/dashboard") 更改仪表板的路线。仪表板路由有一个 Controller ,该 Controller 具有变量 $scope.UserID,该变量是使用 User.Session.user_id 分配的,但是,当我尝试调用 User. Session 它返回未定义,即使 User.Initialise();loginController 中分配它。

有人能解释一下吗?

var $Gladium = angular.module("Gladium", ["ngRoute", "ngAnimate", "ngSanitize"]);

$Gladium.config(function($routeProvider, $locationProvider){

$routeProvider.when("/",{
templateUrl: "pages/login.html",
controller: "loginController"
}).when("/dashboard",{
templateUrl: "pages/dashboard.html",
controller: "dashboardController"
}).when("/error/:error_code", {
templateUrl: "pages/system_error.html",
controller: "errorController"
});

});

/* Controllers */
$Gladium.controller("dashboardController", function($scope, User){
console.log("Services:");
console.log(User.Session);

});
$Gladium.controller("loginController", function($scope, $location, User){

User.Initialise().then(function(){
$scope.Authenticate = true;
if(User.loggedIn()){
$location.path("/dashboard");
}
});

/* Variables */
$scope.Email;
$scope.Password;

$scope.Login = function(){
if(User.logIn($scope.Email, $scope.Password)){
$location.path("/dashboard");
return true;
}
}



});
$Gladium.controller("errorController", function($scope, $routeParams){

$scope.Errors = {
"request": "We couldn't process that request at this time. Please try again later.",
"unknown": "An unknown error occurred if this is persistant please contact technical support."
};

$scope.currentError = $scope.Errors[$routeParams["error_code"]];

});

/* Factories */
$Gladium.factory("User", function($http, $location){

var Session;
var Error;

return {

Initialise: function(){
return $http.get("core.php?do=getSession").then(function(requestData){

if(requestData.data["requestStatus"] == 1){
Session = requestData.data.data;
}else{
$location.path("/error/request");
return false;
}

});
},


loggedIn: function(){
if(Session["user_id"] != 0){
return true;
}else{
return false;
}

},

logOut: function(){
if(Session["user_id"] != 0 ){
$http.post("core.php",{
do: "logout"
}).then(function(requestData){
if(requestData.data["requestStatus"] == 1){

}else{

}
});
}else{
console.warn("There is no user session to logout.");
}
},

logIn: function(Email, Password){
$http.post("core.php",{
do: "login",
email: Email,
password: Password
}).then(function(requestData){
if(requestData.data["requestStatus"] == 1){

Data = requestData.data;

if(Data["actionStatus"] == 1){
Initialise();
}else{
Error = Data["Error"];
return false;
}

}else{
$location.path("/error/request");
return false;
}

$location.path("/error/unknown");
return false;
});
}

}

});

最佳答案

我认为您只是忘记返回 Session 变量,该变量应该是 User 服务的属性

....
$Gladium.factory("User", function($http, $location){

var Session;
var Error;

return {
// return the Session so it can be accessed via User.Session, or it is a variable in private closure
Session:Session
Initialise: function(){
return $http.get("core.php?do=getSession").then(function(requestData){

if(requestData.data["requestStatus"] == 1){
Session = requestData.data.data;
}else{
$location.path("/error/request");
return false;
}

});
},
....

更新

抱歉,上面的更改无法解决您的问题,因为您正在分配 Session 闭包变量,这不会更改 User.Session。这样它仍然保留未定义。

有多种方法可以帮助您解决此问题。

我认为最简单的方法是保持 Session 私有(private)并通过 get 函数 User.getSession() 访问它。

$Gladium.factory("User", function($http, $location){

var Session;
var Error;

return {
// use get function to get Session
getSession:function(){
return Session;
},
Initialise: function(){
return $http.get("core.php?do=getSession").then(function(requestData){

if(requestData.data["requestStatus"] == 1){
Session = requestData.data.data;
}else{
$location.path("/error/request");
return false;
}

});
},
....

这样你就可以通过User.getSession()访问你的Session

关于javascript - Angular JS 工厂变量未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41286892/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com