2017-07-17 21 views
0

APIエンドポイントで動作するionic1アプリケーションがあります。

コールでカテゴリを取得するサービスを作成しました。コンソールそれは約束ではなく、APIからの私のいつものJSONを返す応答をログに記録する場合

.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を呼び出すと、コレクションを何も問題なく再現することができますが、今はそれがこの「約束」に包まれているサービスにあり、コレクションの出力方法がわかりません。

Screenshot of Console Log

私は

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

を試みたが、私は[ngRepeat:iexp]エラー

を得る "項目 でコレクションの形態で目的の式[id:]によってトラック 'but got'カテゴリ 'として分類される。

これは、約束を理解していないケースだと思います。

答えて

0

非同期操作は、あなたが考えているように動作しません。約束が成就すればデータを取得します。だからgetCategoriesメソッドでは.then関数を置くことができ、successFnを呼び出すと、それ以外の場合はエラーerrorFnを呼び出します。コンソールで

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

あなたはなっていたあなたが直接$scope.dataへの約束を割り当てるよう$httpサービスによって返さ約束の目的でした。これは動作します

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(レスポンス)'したいコンソール出力すべきです。 –