2017-02-07 7 views
0

Ich versuche, die Login-Funktion meiner AuthService Factory von meinem AuthLoginController Controller zu verwenden. Das Problem ist, dass, wenn die User.login-Funktion mit einer falschen E-Mail und einem falschen Kennwort ausgeführt wird, die console.log() false zurückgibt, was ich will. Aber wenn ich die richtige E-Mail und Passwort verwenden, ich bin einAngularJs Versprechen gibt undefined zurück

Error: response is not defined 

bekomme ich verstehe es nicht, weil alles mit Funktion einwandfrei funktioniert (Fehler) {}, aber nicht mit der Funktion (Erfolg) {}, obwohl sie sind beide das Ergebnis eines asynchronen Aufrufs.

angular 
    .module('app') 
     .factory('AuthService', ['Member', '$q', '$rootScope', '$state', function(
     User, $q, $rootScope, $state) { 
    function login(email, password) { 
    return User 
    .login({email: email, password: password}) 
    .$promise 
    .then(function(success) { 
     $rootScope.currentUser = { 
     id: response.user.id, 
     tokenId: response.id, 
     email: email, 
     firstname: response.user.firstname, 
     lastname: response.user.lastname 
     }; 
     return true; 
    }, 
    function(error) { 
     return false; 
    } 
    ); 
} return { 
     login: login 
    }; 
    }]); 

Hier ist meine AuthLoginController-Controller.

angular 
    .module('app') 
    .controller('AuthLoginController', ['$scope', 'AuthService', '$state', 
     function($scope, AuthService, $state) { 
    $scope.user = { 
     email: '[email protected]', 
     password: 'test1' 
    }; 

    $scope.login = function() { 
     AuthService.login($scope.user.email, $scope.user.password) 
     .then(function(response) { 
      console.log(response); 
      return; 
      } 
      //go to the default state after login 
      $state.go('test'); 
     }); 
    }; 
    }]); 

Wie kann ich wahr von meinem AuthLoginController abrufen? Dank (Sorry für mein schlechtes Englisch)

+0

Müssen Sie nicht ein Versprechen abgeben, 'then' zu verwenden? – jdmdevdotnet

+0

Nun, ich weiß es nicht. Ich kämpfe mit AngularJs. Ich habe gelesen, dass das Aufrufen der then-Methode eines Versprechens ein neues abgeleitetes Versprechen zurückgibt, aber ich weiß nicht, welche Methode ich verwenden soll. – ThomasF62

Antwort

0
.then(function(success) { 
     $rootScope.currentUser = { 
     id: **response**.user.id, 
     tokenId: **response**.id, 
     email: email, 
     firstname: **response**.user.firstname, 
     lastname: **response**.user.lastname 
     }; 
     return true; 
    }, 

Die Antwortvariable ist nicht in dem „Erfolg“ Callback definiert. Die Argumentvariable "Success" sollte stattdessen verwendet werden oder sie sollte wahrscheinlich in eine Antwort umbenannt werden.

+0

Ich schäme mich selbst Ich habe diese Codezeilen so oft gelesen, dass ich blind geworden bin. Dieser Fehler ist so dumm. Danke, Mann ! – ThomasF62