AngularJS transformResponse

angular-resource, angularjs

Solution

`transformResponse` is executed on `$http` level.

When you customise $resource actions with custom config object, that object is actually passed on to the underlying `$http` service. So if you specify a `transformResponse` callback, it will be executed on `$http` level, and the results of your transformation will be passed back on to $resource.

$resource service will instantiate new object from your response data (which is already transformed by the `transformResponse` callback) and this new object will be an instance of the $resource itself.

So, your `car` object will be an instance of the `Car`, but only for a moment, until it's properties are copied into a new `$resource` object.

Here's a simplistic view of the process:

- $resource service initiates request

- $http service sends request and receives the response

- $http service transforms the response (response is now instance of `Car`)

- $resource service receives the transformed response (from $http)

- $resource service makes an instance of itself using transformed response properties (result is now instance of $resource)

Anyway, I don't recommend decorating or extending the $resource service, because it's simpler to write your own implementation using $http service.

Problem

In angularjs resource, I would like to convert my json data into JS objects ``` //Complex object with inheritance chain function Car(year, make){ this.make = make; this.year = year; } var carResource = $resource("/api/car/id", {id: '@id'}, { get: { method: 'GET', transformResponse: function(data, headersGetter){ return new Car(data.make, data.year); } } } ) ``` However this does not seem to be happening What I am getting back is a `$resource` object meaning that the properties `make` and `year` are set correctly, however the prototype of the returned object points to `$resource` Is there a way where I can map my json data directly to my own objects? Or will I have to write my own 'resource' implementation?

Original source