在angularjs资源中,我想将我的json数据转换为JS对象
//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); } } } )
然而,这似乎并没有发生
我得到的是$resource
对象,意味着属性make
和year
设置正确,但返回对象的原型指向$resource
< / p>
有没有办法可以将我的json数据直接映射到我自己的对象?
或者我必须编写自己的“资源”实现吗?
答案 0 :(得分:16)
transformResponse
在$http
级别执行。使用自定义配置对象自定义$ resource操作时,该对象实际上会传递给基础$http
服务。因此,如果您指定transformResponse
回调,它将在$http
级别执行,您的转换结果将传回$ resource。
$ resource service将从您的响应数据中实例化新对象(已经由transformResponse
回调转换),这个新对象将是$ resource本身的一个实例。
因此,您的car
对象将成为Car
的一个实例,但只是片刻,直到它的属性被复制到新$resource
对象
这是一个简单的过程视图:
Car
的实例)无论如何,我不建议装饰或扩展$ resource服务,因为使用$ http服务编写自己的实现更简单。