【问题标题】:Empty array after get request (AngularJS)获取请求后的空数组(AngularJS)
【发布时间】:2016-05-22 21:10:30
【问题描述】:

在我的示例中,当我发送 GET 请求以获取包含数据的响应数组时,我在 Firefox 的控制台中看到该数组为空。我不知道错误在哪里。

这是我的代码:

//Controller:
$scope.changeDate = function (selFrom) {
     vm.repos = CrudService.getRepoByDay(selFrom);
}


//Service (CrudService):
function CrudService(ResService) {
    var service = {
        getRepoByDay: getRepoByDay
    };

    return service;

    function getRepoByDay(selTo) {
      return ResourceService.test.query(
         { endDate: selTo },
         successResponse,
         errorResponse
      );
    }

    function successResponse(response) {
       return response;
    }
}

//Service (ResService)
test: $resource(baseUrl + '/api/repodates', {
         endDate: '@EndDate'
}, {})

//View
<tbody>
  <tr ng-repeat="report in rc.repos>
    <td ng-repeat="(key, value) in report">
        {{ value }}
    </td>
  </tr>
</tbody>

有人知道我要做什么吗?

【问题讨论】:

    标签: javascript arrays angularjs ajax angular-resource


    【解决方案1】:

    $resource 是异步的,你必须在 promise 的回调中处理它:

    return ResourceService.test.query(
         { endDate: selTo } 
    );
    
    CrudService.getRepoByDay(selFrom).$promise.then(function(data){
           vm.repos = data;
           console.log(data);//log here not ouside the callback to check
    });
    

    使用 $q 编辑示例:

    var deferred = $q.defer();
    ResourceService.test.query(
        { endDate: selTo } 
    ).$promise.then(
         function(data){deferred.resolve(data);},
         function(rejection){deferred.reject(rejection);}
    );
    return deferred.promise;
    

    【讨论】:

    • 也就是说,在 CrudService 的服务中,我不能定义 successResponse?
    • 是的,因为 $promise 是一个你不需要定义原始回调的承诺
    • 你有$q.resolve.reject的例子吗?
    • 我编辑了我的帖子,但你不需要 angular-resource
    • 为什么$resource 不需要这个?当我必须定义$q时,有没有文章可以阅读?
    猜你喜欢
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 2016-07-25
    • 2016-08-29
    • 2017-08-18
    • 2013-08-16
    • 2013-05-07
    • 2017-01-11
    相关资源
    最近更新 更多