12

I like the way the query() method returns an array of resources, which can be saved to the server again.
I am trying to use Angular against the Drupal RestWS module, which returns an object with several "meta" properties and a property called list where the actual data are stored. Is there please a way of telling the resource to take that array instead ?

Example : GET author.json returns :

first: "http://dgh/author?page=0"
last: "http://dgh/author?page=0"
list: [{id:1, type:author, uid:{uri:http://dgh/user/1, id:1, resource:user}, created:1367770006,…},…]
self: "http://dgh/author"
Aleksander Blomskøld
  • 18,374
  • 9
  • 76
  • 82
mojzis
  • 324
  • 1
  • 2
  • 13

1 Answers1

21

With the latest Angular version (1.1.2 or later), you can configure the resource with a transformResponse:

var MyResource = $resource(
    '/author.js',
    {},
    {
        'get': {
            method: 'GET',
            transformResponse: function (data) {return angular.fromJson(data).list},
            isArray: true //since your list property is an array
        }
    }
);
Aleksander Blomskøld
  • 18,374
  • 9
  • 76
  • 82
  • this looks promising, but i cant get it to work, I keep getting `TypeError: Object # has no method 'push'`. I think its a problem i usually have when an object is returned for a method that has isArray:true. BTW, is the new version documented somewhere ? – mojzis May 05 '13 at 18:10
  • 1
    Hmm, ok. I'll see if I can fix it in a JSFiddle. The docs are here: http://code.angularjs.org/1.1.4/docs/api/ngResource.$resource , but the transformResponse isn't that well documented :( – Aleksander Blomskøld May 05 '13 at 18:21
  • I've changed the code a bit. This is a working example: http://jsfiddle.net/59nhp/ (with other data, so it's not the same transform function) – Aleksander Blomskøld May 05 '13 at 20:18
  • 1
    Set isArray:true, parse the data and return the array: `list:{isArray:true,method:'get',transformResponse: function (data, headers) {return JSON.parse(data).list; }}` - http://plnkr.co/edit/8tj1qqqzZ2KLWkDhT2mQ – joakimbl May 05 '13 at 20:27