2017-05-08 1 views
0

In diesem Code rufe ich die API. Die Anforderung ist, die Daten von 3 api zu nehmen und alle von ihnen zu aggregieren und in der Tabelle anzuzeigen.Angular js beim Aufruf von api Ich benutze die Daten nicht in der gleichen Funktion

var app = angular.module ('myApp', []);

app.controller('PersonController', function($scope,$http) { 
    $scope.arr1 =[]; 
     $scope.arr2 = []; 
     $scope.arr3 = []; 
     $scope.temp ; 


     function fetchAllBillable(){ 
      var me =$scope;   
      $http.get("http://echo.jsontest.com/insert-key-here/insert-value-here/key/value") 
       .then(function(response) { 
          $scope.temp = response.data; 

         console.log(me.temp); 

     }); 
     return $scope.temp; 

the value of scope.temp is undefined 
+0

Haben Sie eine Antwort von Ihrem Service bekommen? –

+0

Ja, ich erhalte eine Antwort in console.log (me.temp), die innerhalb geschrieben wird, aber keine Antwort außerhalb von http.get erhält. –

+0

Stellen Sie sicher, dass Ihre Return-Anweisung innerhalb der Funktion sein sollte (da ich keine geschweiften Klammern in Ihrer Funktion sehen kann), und sie nimmt den anfänglichen Temp-Wert an. –

Antwort

0

$http läuft asynchron, so dass die Log-Anweisung außerhalb then wird noch nicht zur Verfügung.

angular.module('plunker', []).controller('MainCtrl', function($http, $scope) { 
    $http.get('https://jsonplaceholder.typicode.com/posts/1') 
    .then(function(res) { 
     $scope.data = res.data; 
     console.log(res.data); // Object {...} 
    }); 
    console.log($scope.data); // undefined 
}); 

Edit:

Sie können mit Versprechen Chaining $ http ruft fusionieren oder $q.all

angular.module('plunker', []).controller('MainCtrl', function($http, $scope, $q) { 
    var users = 'https://jsonplaceholder.typicode.com/users/1'; 
    var comments = 'https://jsonplaceholder.typicode.com/comments/' 

    // Promise chaining 
    $http.get(users) 
    .then(function(res) { 
     $scope.user = res.data; 
     return $http.get(comments); 
    }) 
    .then(function(res) { 
     $scope.comments = res.data.slice(30) 
    }) 

    // $q.all 
    $q.all([ 
    $http.get(users), 
    $http.get(comments) 
    ]).then(function(resolves) { 
    // resolves[0] is users 
    // resolves[1] is comments 
    }) 
}); 
+0

In diesem summary.html habe ich einen Controller schreiben, wo Daten von 3 API folgend Abrechenbare API 1. psbillableOffshore 2. offshoreManager1 Buffer API 1. psbufferOffshore 2. OffshoreManager Client API 1.offshoreManager kommenden 2.clientBillingOffshore1 3.clientBillingOffshore2 In allen drei API Manager Name ist üblich. Ich muss in der Tabelle anzeigen. 1.offshoreManager 2.psbillableOffshore 3. psbufferOffshore 4.clientBillingOffshore1 5.clientBillingOffshore2 –

+0

In diesem Code Kommentare, wenn wir auf console.log Anzeige (Kommentare); Es zeigt undefined.Kannst du das Problem nachschlagen –

+0

Mein Fehler, ich habe '$ q.all' in einer Weile nicht verwendet. Das Argument im Callback ist ein Array von aufgelösten Daten. – Phix

0

Ich bin nicht sicher, aber in dem Code versehen Sie die schließenden Tags nicht richtig sind. Außerdem ist $http ein Async-Aufruf (siehe this Stack Overflow-Artikel für weitere Informationen), so dass der nachfolgende Code ausgeführt wird, bevor die Anforderung ausgeführt wird.

Der folgende Code sollte funktionieren.

app.controller('PersonController', function($scope,$http) { 
    $scope.arr1 =[]; 
     $scope.arr2 = []; 
     $scope.arr3 = []; 
     $scope.temp ; 


     function fetchAllBillable(){ 
      var me =$scope;   
      $http.get("http://echo.jsontest.com/insert-key-here/insert-value-here/key/value") 
       .then(function(response) { 
          $scope.temp = response.data; 

         console.log(me.temp); 
         return $scope.temp; 

       }); 
     }; 
}; 
+0

Es gibt mir undefined.Ist es keine Möglichkeit kann ich diese $ scope.temp und nach dieser Funktion verwenden. –

+0

Nein, es gibt nicht, das ist mir bewusst, deshalb gibt es .dann. Was passiert, wenn Sie versuchen, ** response.data ** zurückzugeben? @sourabhlodha – Marc

+0

var abc = fetchAllBillable(); Alarm (abc '); Es print undefined. Ich brauche den Wert in abc für die weitere Operation. –

Verwandte Themen