2016-07-20 17 views
1

Ich versuche, ein Objekt aus einer $ rootScope-Funktion namens retrieveUser() in AngularJS zurückzugeben. Das Objekt wird zurückgegeben. Ich habe console.log() auf die Antwort der Funktion ausgeführt, wenn $ http erfolgreich ist. Hier ist meine $ rootScope Funktion:

$rootScope.retrieveUser = function() { 

     var apiUrl = "http://104.251.218.29:8080"; 

     if($cookies.get('tundraSessionString')) { 

      var cookie = $cookies.get('tundraSessionString'); 

      $http({ 
       method: "POST", 
       url: apiUrl + "/api/master/v1/auth/checkauth", 
       data: "sessionString=" + cookie, 
       headers: { 
        'Content-Type' : 'application/x-www-form-urlencoded;', 
        'Cache-Control': 'no-cache' 
       } 
      }).then(function mySuccess(response) { 

       if(response.data.event == "error") { 

        window.location = "/auth/logout"; 

       } else { 

        return response.data; 

       } 


      }) 

     } else { 

      window.location = "/auth/login"; 

     } 

    }; 

Mit dieser Methode ich zugreifen es in meinem Controller wie diese (und console.log() nur meine Arbeit zu testen):

vm.user = $rootScope.retrieveUser(); 
console.log($rootScope.retrieveUser()); 

Aber, Ich muss das noch zur Arbeit bringen. Ich habe versucht, bestimmte Objekte in einem Array in meiner $ rootScope-Funktion anzugeben. Ich weiß, dass es läuft, weil ich das $ rootScope etwas trösten muss, wenn es ausgeführt wird, und es zeigt eine console.log() der Antwort der $ http Anfrage. Es sieht wie folgt aus:

Object {event: "success", table: Object} 
event:"success" 
table:Object 
__proto__:Object 

Doch wenn ich() die vm.user mit der Funktion $ rootScope.retrieveUser() console.log, auch wenn die Funktion die lösende Aufgabe soll zurückkehren, habe ich einfach erhalten "nicht definiert".

Ich habe seit Tagen meinen Kopf auf diesen Kopf geschlagen, lesen Sie einige Artikel über Funktionen/Objekte und ich kann immer noch nicht herausfinden. Wir sind zwei Tage in.

Antwort

1

versuchen globaly verfügbar sein:

 if($cookies.get('tundraSessionString')) { 

      var cookie = $cookies.get('tundraSessionString'); 

      //return a promise 
      return $http({ 
       method: "POST", 
       url: apiUrl + "/api/master/v1/auth/checkauth", 
       data: "sessionString=" + cookie, 
       headers: { 
        'Content-Type' : 'application/x-www-form-urlencoded;', 
        'Cache-Control': 'no-cache' 
       } 
      }).then(function mySuccess(response) { 

       if(response.data.event == "error") { 

        window.location = "/auth/logout"; 

       } 
       else { 

        return response.data; 

       } 


      }) 

     } 
     else { 

      window.location = "/auth/login"; 

     } 

und

$rootScope.retrieveUser().then(function(user){vm.user = user;}) 
+1

Das funktionierte! Ich werde daran erinnern nutze ab sofort die Verspre- chungsmethode Ich bin neu bei Angular Erste App die ich gebaut habe Aber ich bin ziemlich weit gekommen ohne einen Schluckauf Danke für die Hilfe! –

1

Was Sie von retrieveUser zurückgeben, wenn Ihr Cookie gesetzt ist, was $http zurückgibt, was eine promise ist. Versuchen Sie folgendes:

$rootScope.retrieveUser().then(function(user){vm.user = user;})

+0

Typeerror: kann Eigenschaft 'und dann' undefinierter lesen war im Chrome Konsolenprotokoll –

+0

Die 'retrieveUser' -Funktion sollte eine Verheißung zurückgeben, wenn die .then-Methode verwendet wird. Sie können die $ http.get (die auch eine Zusage verwendet) zurückgeben –

+0

yeah whoops ich bin zu coffeescript gewöhnt, müssen Sie auch ändern, um 'return $ http ({...' –

0

retrieveUser fn Ihre Daten nicht zurück :) $ http asynchron Funktion und Sie sollten über Versprechungen

function handleUser(user){ 
//do something 
} 

function retrieveUser(callback){ 
    $http({...}).then(function(response){ 
    callback(response.data.user); 
    }); 
} 
//how to use it: 

retrieveUser(handleUser); 

aber vor allem müssen Sie möglicherweise einen Dienst lesen für den Erhalt einiger Daten anstelle von $ rootScope

und zweitens können Sie einen Benutzer in Ihrer Vorlage in script Tag übergeben, dann brauchen Sie nicht nee d eine andere HTTP-Anforderung und Benutzer wird diese

<script>var user=<?php echo json_encode($user);?></script>