2016-04-15 12 views
1

ich habe meine authservice wie unten angegeben,Versprechen zurückgegebene Objekt in Winkel js

myApp.factory('Authentication', 
    ['$rootScope', '$location', 'URL', '$http', '$q', 
    function ($rootScope, $location, URL, $http, $q) { 

    var myObject = { 
    authwithpwd: function (user) { 

     var dfd = $q.defer(); 
     $http 
     .post('Mart2/users/login', {email: user.email, password: user.password}) 
     .then(function (res) { 

      return dfd.resolve(res.data); 


     }, function (err) { 

      return dfd.reject(err.data); 

     }); 

     return dfd.promise; 

    } //login 
    }; 
    return myObject; 
}]); //factory 

und ich bin diesen Dienst in Benutzer-Dienst wie folgt:

myApp.factory('UserService', 
    ['$rootScope', '$location', 'URL', '$http', '$q', 'Authentication', 
    function ($rootScope, $location, URL, $http, $q, $Authentication) { 

    var myObject = { 
    login: function (user) { 
     $Authentication.authwithpwd(user).then(function (regUser) { 
     console.log(regUser); 
     }).catch(function (error) { 
     $rootScope.message = error.message; 
     }); 
    }, 
    getUserToken: function() { 
     return $rootScope.currentUser.apiKey; 

    }, 
    isLogged: function() { 
     if ($rootScope.currentUser) { 
     return true; 
     } else { 
     return false; 
     } 
    } 
    //login 
    }; 
    return myObject; 
}]); //factory 

Ich bin sehr neu für Winkel js. Während ich Dienst schreibe und diesen Dienst vom Controller aus anrufe, habe ich eine Konsole in den Benutzerdienst debuggen lassen, der sein zurückkehrendes Objekt anzeigt. Ich bekomme ein Objekt, wenn ich console.log (regUser) mache. irgendeine Idee warum?

+2

Können Sie Ihre Frage ein wenig klären? Was genau ist dein Problem? Erhalten Sie das zurückgegebene Objekt nicht in myObject? Eine Geige oder Plunkr wäre auch hilfreich –

+0

Ich bekomme keine Versprechen von AuthenticationService in Login-Methode des Benutzerservice. Ich bekomme [Objekt, Objekt] in Zeile, wo ich console.log (regUser) gemacht habe. Ich werde versuchen, eine Geige dafür auch zu schaffen –

+0

vermeiden Sie die Verwendung von $ rootscope -> http://stackoverflow.com/questions/36645399/save-current-user-information-and-use-it-in-controllers/ 36645460? Noredirect = 1 # comment60884162_36645460 – thegio

Antwort

0

Um das Objekt zu erhalten, müssen Sie Ihre myObject-Deklaration ändern. Im Grunde müssen Sie ein Versprechen von der Login-Funktion zurückgeben und dann einen Rückruf schreiben, um die aufgelösten Daten zu erhalten.

myApp.factory('UserService', 
    ['$rootScope', '$location', 'URL','$http','$q','Authentication', 
    function($rootScope,$location, URL,$http,$q,$Authentication) { 

    var myObject = { 
    login: function(user) { 
     var defer = $q.defer(); 
     $Authentication.authwithpwd(user).then(function(regUser) { 
      console.log(regUser); 
      defer.resolve(regUser); 
     }).catch(function(error) { 
      $rootScope.message = error.message; 
      defer.reject(regUser); 
     }); 
     return defer.promise; 
    }, 
    getUserToken:function() { 
     return $rootScope.currentUser.apiKey; 
    }, 
    isLogged:function() { 
     if($rootScope.currentUser){ 
      return true; 
      } else { 
      return false; 
      } 
     }//login 
    }; 
    return myObject; 
}]); //factory 

Um das Objekt von der Steuerung zu extrahieren oder aus einem anderen Service benötigen Sie einen Rückruf

UserService.login(user) 
    .then(function (data) { 
     $scope.data = data; 
    }, function (error) { 
     $scope.error = error; 
    }); 

Auch in dem Authentifizierungsdienst schreiben Sie können nur ein ‚dfd.resolve‘ zu tun, anstatt ‚Rückkehr dfd.resolve '; da gibst du schon die dfd.promise zurück.
Ich habe einen Fiddler erstellt here

+0

Sie kombinieren Fabriken und Dienstleistungen, obwohl sie in Wirklichkeit zwei verschiedene Dinge in AngularJS sind. –

+0

Wie und wann in diesem Zusammenhang Services und Factory zu verwenden, können Sie ein wenig im aktuellen Kontext wie im obigen Code ausgeführt. @ EvanBechtol –