如何更改Angular.js中$ resource返回的数据?

Ang*_*hef 18 javascript angularjs

我正在使用以这种格式返回JSON数据的API:

{
    paging: {
        previous: null,
        next: null
},
    data: [
        { title: 'First Item' },
        { title: 'Second Item' },
        ...
    ]
}
Run Code Online (Sandbox Code Playgroud)

我正在使用Angular的$ resource服务来获取这些数据.
我的代码 - 位于控制器中 - 是这样的:

var Entity = $resource('/api/entities');
var entities = $scope.entities = Entity.get();
Run Code Online (Sandbox Code Playgroud)

然后,在视图中,我可以显示如下数据:

<ul>
  <li ng-repeat="entity in entities.data">{{entity.title}}</<li>
</ul>
Run Code Online (Sandbox Code Playgroud)

一切正常,但是:

  • 我宁愿只公开entities.data视图的内容,而不是整个entities对象.如何填充之前拦截GET请求返回的数据以对其进行修改$scope.entities
  • 相关问题:因为我正在获取一数据,所以使用它Entity.query()代替它会更干净Entity.get().但是,如果我Entity.query()在上面的代码中使用,我会收到错误"TypeError:Object#没有方法'push'".这是有道理的,因为API返回一个对象而不是一个数组(因此,对象上没有'push'方法).同样,如果我可以.data从响应中提取属性,我会有一个数组.

根据Dan Boyon的这些指示,我设法自定义默认$resource服务并覆盖.get()或.query()方法,但我不知道从那里去哪里.

Chr*_*ris 24

我认为您不需要修改get或query默认值.只需使用成功回调即可完成您想要的操作.它应该更加健壮.

Entity.get(
    {}, //params
    function (data) {   //success
        $scope.entities = data.data;
    },
    function (data) {   //failure
        //error handling goes here
    });
Run Code Online (Sandbox Code Playgroud)

Html也会更干净:

 <ul>
      <li ng-repeat="entity in entities">{{entity.title}}</<li>
 </ul>
Run Code Online (Sandbox Code Playgroud)

顺便说一下,我通常会为我的资源声明服务,然后在需要时将它们注入我的控制器.

 myServices.factory('Entity', ['$resource', function ($resource) {
     return $resource('/api/entities', {}, {
     });
 }]);
Run Code Online (Sandbox Code Playgroud)

  • @blesh当你在isArray:false接收数组时,通常会发生错误,例如使用get.如果您正在接收数组,则可能需要使用缺省值为isArray:true的查询. (3认同)
  • ...显然我在上面评论中提到的问题与我一起返回一个字符串数组而不是对象.鉴于$ resource如何为其获得的结果添加方法,这是有道理的.https://groups.google.com/forum/#!msg/angular/QjhN9-UeBVM/UjSgc5CNDqMJ%5B1-25%5D (2认同)