在
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); } } } )
不过这似乎并没有发生
我回来的是一个$资源对象,意味着属性make和year都正确设置,然而返回的对象的原型指向$resource
有没有办法可以将我的json数据直接映射到我自己的对象?
还是要写自己的“资源”实现?
transformResponse在$http级别上执行.
当您使用自定义配置对象定制$资源操作时,该对象实际上传递到底层的$http服务.所以如果你指定一个transformResponse回调函数,它将在$http级别执行,你的转换结果将被传回给$resource.
$资源服务将从您的响应数据(已由transformResponse回调转换)中实例化新对象,并且此新对象将是$资源本身的一个实例.
所以,你的汽车对象将是汽车的一个实例,但只有一会儿,直到它的属性被复制到一个新的$资源对象.
这是一个简单的过程:
> $资源服务启动请求
> $http服务发送请求并收到响应
> $http服务转换响应(响应现在是Car的实例)
> $resource服务接收转换的响应(从$http)
> $资源服务使用转换的响应属性(现在是$资源的实例)使自身的一个实例
无论如何,我不建议装饰或扩展$资源服务,因为使用$http服务编写自己的实现更为简单.