2016-08-01 8 views
-2

Ich benutze Angular 1.5.anguar 1.5 Zugriffsdaten in http.get ohne Gültigkeitsbereich

Ich kann nicht auf meine Daten zugreifen, aus dem http.get, aus dem http.get. Lassen Sie mich erklären:

ich meine Komponente haben:

dies ein Test -> für den Test

undefined:

(function(){ 
'use strict'; 
class myComponent { 
    constructor(
     $http, 
     $scope) 
    { 
     var self = this; 
     self.test="this is a test"; 
     $http.get(MYAPI).then(function(response){ 
     self.MYDATA = response.data; 
     console.log(self.MYDATA) 
     }); 
     console.log(self.test) 
     console.log(self.MYDATA) 
    } 

} 
angular.module('myApp') 
.component('myApp.test', { 
    templateUrl: 'myTemplate.html', 
    controller: myComponent, 
    controllerAs:'vm', 
}); 
})(); 

Die console.log mir geben -> aus dem http.get

Objekt {ID: 1 ...} -> in der http.get

So kann ich nicht auf meine Daten aus dem http.get zugreifen und das ist was ich will.

Haben Sie jemand eine Idee? Danke.

+0

Die Anforderung ist asynchron, daher ist die Zuweisung noch nicht erfolgt. die Reihenfolge der Protokolle sollte Ihnen erlauben, dies zu sehen ... Sie werden feststellen, dass die im Rückruf ist die letzte zu feuern, obwohl die erste in lesbarer Reihenfolge – aw04

+0

Das ist richtig, ich habe es nicht bemerkt, danke. Und haben Sie einen Hinweis auf die Verwendung der Daten in der Steuerung? – Wandrille

Antwort

0

$http.get ist ein asynchroner Aufruf, dh die Programmausführung wartet nicht auf das Abrufen der Daten vom Server.

Also bis console.log(self.MYDATA) außerhalb von $http.get() ausgeführt wird, wurden die Daten nicht vom Server abgerufen, deshalb erhalten Sie eine undefined error.

Um dieses Problem zu lösen oder asynchrone Aufrufe zu behandeln, können Sie etwas tun könnte:

mit Hilfe von Callbacks
var promise = $http.get(MYAPI); 

dann den Datenzugriff auf die folgende Weise:

promise.then(
      function successCallBack(response) 
       { 
        self.MYDATA = response.data; 
        console.log(self.MYDATA) 
       } 
      ).then(
       function errorCallBack(response) 
       { 
        console.log(response); 
       }   
      ); 

Hier ein schöner Artikel auf callbacks, der Ihnen helfen könnte!

+0

Das funktioniert, danke. Aber ich weiß nicht warum, ich kann es nicht in einer Kinderkomponente haben. Ich kann Zugriff auf self.test in der untergeordneten Steuerung haben, aber nicht selbst. MYDATA. Aber vielleicht ist diese Frage nicht verwandt. Muss ich das Versprechen in das Kind senden und dann das Versprechen machen. Dann(), das funktioniert, aber nicht sehr nett. Oder ist es möglich, die Daten direkt von der self.MYDATA zu senden? – Wandrille

+0

Sie können versprechen als 'globale' Variable angeben und dann können Sie auf' response' im gesamten Skript mit Hilfe von Callbacks zugreifen. ODER anstelle einer untergeordneten Komponente können Sie einen Dienst erstellen und dann die 'response' als Argument dafür senden Service. Dies würde funktionieren, da Service-Anrufe synchron sind – varunsinghal65

+0

Vielen Dank. Das hat mir geholfen – Wandrille