我有以下角度应用程序,并且该服务未正确返回数据。如果我在console.log中调用$http
回调响应,我知道Web服务的数据是好的。
然而,在我的应用程序中它没有显示。这是HTML:
<div id="main-content" class="content" ng-app="wflow-app" ng-controller="main-controller">
<h3>Actors</h3>
<li>
<ul ng-repeat=" a in actors">
<li>{{a}}</li>
</ul>
</li>
这是Javascript:
var app = angular.module('wflow-app', []);
app.factory('dataService', function($http, $q){
var _baseUrl = webServiceContext;
var deferred = $q.defer();
var getActors = function(){
$http.get(_baseUrl + '/actors').then(function(response){
console.log(response.data);
deferred.resolve(response.data);
}).catch(function (response) {
console.log("Rejected!");
deferred.reject(response.statusCode);
});
return deferred.promise;
};
return {
getActors: getActors
};
});
app.controller('main-controller', function($scope, dataService, $timeout) {
$scope.servicesUrl = webServiceContext;
$scope.actors = dataService.getActors();
});
为什么这不起作用?
如果我在我的控制器中使用它,它可以工作:
dataService.getActors().then(function (data) {
$scope.actors = data;
});
答案 0 :(得分:0)
你的deferred.reject在哪里?
$http.get(_baseUrl + '/actors').then(function(response){
console.log(response.data);
deferred.resolve(response.data);
}).catch(function(response) {
deferred.reject(response.statusCode);
});
如果您的服务器响应非200响应,它将永远不会被拒绝
我个人只是将其改为......
var getActors = function(){
return $http.get(_baseUrl + '/actors');
};
dataService.getActors()的结果也是一个promise。因此,因为返回值是一个承诺,你应该按照以下方式调用promises THEN方法......
dataService.getActors().then(function(response) {
$scope.actors=response.data;
}).catch(function(response) {
//oops
})
这是因为$ http返回一个promise。 $ q正在做的唯一事情是使用response.data解析而不是使用响应进行解析。