javascript - 如何强制 Restangular 的 getList 与 Laravel 5 的分页对象一起使用?

标签 javascript angularjs laravel restangular laravel-pagination

我有一个页面,我想在其中显示分页的用户帖子。对于后端,我使用 Laravel 的资源 Controller ,在前端使用 Restangular 服务。

所以后端实现如下所示:

// url is /users/0/posts
public function index(Post $post)
{
    return $post->whereUserId(\Auth::id())->paginate(20);
}

前端看起来像这样:

/*
 * posts.service.js
 */
angular.module('app.services')
    .service('posts', Posts);

Posts.$inject = ['Restangular'];

function Posts(Restangular) {
    return Restangular.service('posts', Restangular.one('users', 0));
}



/*
 * posts.controller.js
 */
angular.module('koodzo.controllers')
    .controller('PostsController', PostsController);

ContentController.$inject = ['posts'];

function PostController(posts) {
    var vm = this;

    vm.posts = posts.getList()
        .then(function(response) {
            vm.pagination = response;
            vm.posts = response.data;
        });
}

所以,显然,这是行不通的,因为 Restangular 的 getList 期望从服务器接收一个数组来对其进行重新 Angular 化,但是 Laravel 的分页器返回一个对象,并且该数组位于 的 data 字段中对象。

问题是如何让 Restangular 看到 response.data 是它需要的数组?

最佳答案

为了使 Laravel 的分页响应与 Restangular 的 getList() 配合使用,您需要注册一个响应拦截器,它将返回您在 response.data 中获得的任何内容作为响应。

下面的代码就可以解决这个问题:

app.module('yourModule').config(function(RestangularProvider) {
  RestangularProvider.addResponseInterceptor(parseApiResponse);

  function parseApiResponse(data, operation) {
    var response = data;

    if (operation === 'getList' && data.data) {
      response = data.data;
      response.metadata = _.omit(data, 'data');
    }

    return response;
  }
});

getList()的调用将直接为您提供data对象。此外,您将能够访问 Laravel 返回的分页元数据 - 它将存储在响应的 metadata 属性中。

关于javascript - 如何强制 Restangular 的 getList 与 Laravel 5 的分页对象一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34535178/

相关文章:

javascript - AngularJS异步请求方法服务使用promise返回数据

php - 处理 undefined variable

php - 在多个表中搜索并在所有表中应用条件

php - RESTful 应用程序中 MyController 缺少参数 1

javascript - 在行按钮单击上生成事件并添加图标?如何

javascript - Jquery多选图片上传限制

javascript - Struts2 jsp页面在新窗口中打开而不是内容div

javascript - 我如何在 jQuery 中使用 preg_match?

angularjs - ng-if 被调用的次数多于应有的次数

security - 基本身份验证不适用于 AngularJS 客户端和 Java Jersey 后端(未附加 header )