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?
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:
Car
)Anyway, I don't recommend decorating or extending the $resource service, because it's simpler to write your own implementation using $http service.