2017-07-17 2 views
0

Ich habe eine ionic1-Anwendung, die mit meinen API-Endpunkten funktioniert.

Ich habe einen Dienst erstellt, der auf Abruf Kategorien bekommt.

.factory('expenses', function($http) { 

    var expenseCategories = []; 

    return { 

     getCategories: function(){ 

      return $http.get('URL_HERE').then(function(response){ 
       expenseCategories = response.data.data[0]; 
       return expenseCategories.categories; 
      }); 

     } 

    } 

}) 

Ich nenne den Dienst in meinem Controller

.controller('expenseCategoryCtrl', function($scope, $state, expenses) { 

    $scope.categories = expenses; 
    $scope.data = $scope.categories.getCategories(); 
    console.log($scope.data); 

}) 

Wenn Konsole die Antwort Protokollierung es ein Versprechen nicht meine übliche json von der API zurückgibt. Wenn ich die API im Controller anrufe, kann ich die Collection ohne Probleme wiederholen, aber jetzt ist es in einem Service, es ist in dieses "Versprechen" eingeschlossen und ich bin unsicher, wie ich die Sammlung ausgeben soll.

Screenshot of Console Log

Ich habe

versucht
<li class="item item-toggle" ng-repeat="categories as category"> 
     {{ category }} 
     </li> 

aber ich habe den Fehler

[ngRepeat: iexp] Erwartete Ausdruck in Form von "Artikel in Sammlung [Track von id] 'aber bekam' Kategorien als Kategorie ".

Ich glaube, das ist ein Fall von nicht zu verstehen, das Versprechen.

Antwort

0

Async-Operation funktioniert nicht so, wie Sie denken. Sie erhalten Daten, wenn das Versprechen erfüllt ist. So auf getCategories Methode könnten Sie setzen .then Funktion und es wird successFn ein Versprechen erfüllt sonst auf Fehler ruft es errorFn.

$scope.categories.getCategories().then(function successFn(data){ 
    $scope.data = data 
}, function errorFn(error){ console.log(error) }); 

In Konsole, was Sie war von $http Dienst zurück Versprechen Objekt bekommen, wie Sie direkt Versprechen $scope.data zugewiesen.

1

Hoffnung dies funktionieren wird:

.controller('expenseCategoryCtrl', function($scope, $state, expenses) { 

    $scope.categories = expenses; 
    $scope.data = $scope.categories.getCategories().then(function(response){ 
console.log(response); 
},function(error){ 
console.log(error); 
}); 
    console.log($scope.data); 

}) 
+0

'console.log (Antwort)' sollte die Ausgabe trösten Sie wollen. –

Verwandte Themen