2017-07-17 130 views
0

我有一個ionic1應用程序與我的API端點一起工作。

我創建了一個服務,該服務在通話中獲取類別。

.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; 
      }); 

     } 

    } 

}) 

我撥打服務在我的控制器

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

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

}) 

當控制檯登錄,它返回一個承諾,而不是我從API常規的JSON響應。如果我在控制器中調用API,我可以重複收集而不會有任何問題,但現在它處於服務中,它包裹在「承諾」中,我不確定如何輸出收集。

Screenshot of Console Log

我已經試過

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

,但我得到的錯誤

[ngRepeat:iexp]在「項目形式 收集預計表達[跟蹤ID]'但是得到'類別作爲類別「。

我相信這是一個不理解承諾的情況。

回答

0

異步操作無法按照您的想法操作。承諾完成後,您將獲得數據。所以在getCategories方法,你可以把.then函數,它會打電話successFn一個承諾履行否則錯誤它叫errorFn

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

在控制檯你得到什麼是由$http服務返回的,你直接分配承諾$scope.data承諾對象。

1

希望這將工作:

.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(響應)'應該安慰你想要的輸出。 –