视图中的角度承诺不显示

时间:2016-01-21 16:57:31

标签: javascript angularjs

我有以下角度应用程序,并且该服务未正确返回数据。如果我在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;
});

1 个答案:

答案 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解析而不是使用响应进行解析。