AngularJS 'Cannot read property 'dann' undefined'
Habe ich das problem, wenn ich auf login-button, der chrome-console log:
eckig.min.js:117 TypeError: Cannot read property 'dann' undefined
bei m.$Umfang.logIn (loginModuleController.js:11)
Service:
angular.module('loginModule')
.factory('loginService', function($http){
return{
login: function(username, password){
var session;
$http.post('../server/php/auth/auth.php', {
username: username,
password: password
})
.then(function(res){
session = res;
});
return session;
},
isLogged: function(){
return $http.get('../angCMS/server/php/auth.php?is_logged=true');
},
logOut: function(){
return $http.get('../angCMS/server/php/auth.php?logout=true');
}
};
});
controller:
angular.module('loginModule')
.controller('LoginCtrl', ['$scope', 'loginService', function($scope, loginService){
$scope.auth = false;
$scope.username;
$scope.password;
$scope.logIn = function(){
loginService.login($scope.username, $scope.password).then(function(response){
}, function(res){
});
};
$scope.isLogged = function(){
loginService.isLogged()
.then(function(response){
if(response){
$scope.auth = true;
}
});
};
$scope.logOut = function(){
loginService.logOut()
.then(function(response){
if(response){
$scope.auth = false;
}
});
};
}]);
- und dies ist die html-Vorlage:
<div class="container" ng-if="auth==false">
<div class="col-md-4 col-md-offset-4">
<div class="row">
<br/><h2 align="center">Login</h2>
</div>
<div class="well">
<form class="form-horizontal">
<fieldset>
<div class="form-group">
<input type="text" class="form-control" placeholder="Username" ng-model="username" required>
</div>
<div class="form-group">
<input type="password" class="form-control" placeholder="Password" ng-model="password" required>
</div>
<div class="form-group">
<button class="btn btn-md btn-primary btn-block" type="submit" ng-click="logIn()">Sign in</button>
</div>
</fieldset>
</div>
</form>
</div>
</div>
PHP login-Methode:
public function login($user, $pass){
$user = htmlspecialchars(trim($user));
$pass = md5(htmlspecialchars(trim($pass)));
$res = $this->DB->prepare("SELECT * FROM `admin` WHERE username = :user");
if(!$res->execute(Array(":user"=>$user)))
die(mysql_error());
$row = $res->fetch(PDO::FETCH_ASSOC);
if(!$row['password'] == $pass)
die("Errore: password errata!");
$_SESSION['logged'] = $row;
array_push($session, $_SESSION['logged'], true);
return $session;
}
InformationsquelleAutor faserx | 2016-06-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist eher ein Missbrauch von Versprechungen Problem.
Möchten Sie vielleicht zuerst schauen, wie verspricht Arbeit:
Sie von Ihrem service-code:
Wenn
login(username, password)
heißt, die session ist nochundefined
nach der Rückkehr.Dies ist, weil
$http.post()
ist eine asynchrone Funktion, die.then()
Klausel nicht unverzüglich ausgeführt.Wie bereits von Snixtor Antwort,
sollten Sie "return den Rückgabewert
$http.post()
":Dann unter Bezugnahme auf Ihre controller, die die logIn-Methode:
den
response
parameter ausloginService.login().then()
ist genau der Wert Ihres geplantensession
variable aus Ihrem bisherigen Umsetzung.InformationsquelleAutor kazenorin
Die Sie zurückgeben, eine nicht zugewiesene variable namens "session". Also, was Sie hier tun, in der Ihr eingeloggt Methode ist die Rückgabe undefiniert. Undefined wird nicht über eine Methode namens dann.
Meine Vermutung ist, Sie wirklich wollen, um return $http.post-Methode, die wiederum gibt ein Versprechen. So können Sie die Sitzung in der Steuerung?
Php ist irrelevant.
InformationsquelleAutor Rob Louie
Ihre service-Funktion
login
ist nicht wieder die Versprechen, erstellt durch den Aufruf$http.post
. Stattdessen müssen Sie diese:Beachten Sie auch, dass habe ich entfernt, die
session
variable aus der Funktion. Es ist diethen
Funktion im controller werden muss, dass der Umgang mit der Antwort.Ihre
isLogged
undlogOut
Funktionen gut Aussehen schon. Wiederholen Sie dieses Muster.Das Problem hat nichts mit der php-Methode. Verstehen Sie, was ich gesagt habe in die Antwort?
Ich merkte es , ich habe die php-nur, damit Sie sehen, was ich wollte, wieder zurück zu kommen die Methode
InformationsquelleAutor Snixtor