我有一个能够与我的API端点一起使用的ionic1应用程序。
我已经创建了一个随叫随到的服务类别。
.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返回一个promise,而不是我常用的json。如果我在控制器中调用API,我可以毫无问题地重复该集合,但是现在它已经包含在这个"承诺"中的服务中。而且我不确定如何输出集合。
我已经尝试了
<li class="item item-toggle" ng-repeat="categories as category">
{{ category }}
</li>
但我收到了错误
[ngRepeat:iexp]&#39; item 形式的预期表达式 集合 [通过 id跟踪]&#39;但是将类别作为类别&#39;。
我认为这是一个不理解承诺的案例。
答案 0 :(得分: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);
})
答案 1 :(得分:0)
异步操作并不像你想的那样工作。完成承诺后,您将获得数据。因此,在getCategories
方法上,您可以设置.then
函数,它会调用successFn
一个承诺,否则会调用errorFn
错误。
$scope.categories.getCategories().then(function successFn(data){
$scope.data = data
}, function errorFn(error){ console.log(error) });
在控制台中,您获得的是$http
服务返回的承诺对象,因为您直接将承诺分配给$scope.data
。