AngularJS transformResponse

Mr *_*yde 12 angularjs angular-resource

在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对象,意味着属性makeyear设置正确,但返回的对象的原型指向$resource

有没有办法可以将我的json数据直接映射到我自己的对象?

或者我是否必须编写自己的"资源"实现?

Ste*_*wie 16

transformResponse$http水平上执行.

使用自定义配置对象自定义$ resource操作时,该对象实际上会传递给基础$http服务.因此,如果指定transformResponse回调,它将在$http级别上执行,并且转换的结果将传递回$ resource.

$ resource服务将从您的响应数据(已经由transformResponse回调转换)实例化新对象,并且此新对象将是$ resource本身的实例.

因此,您的car对象Car只是片刻的一个实例,直到它的属性被复制到新$resource对象中.

这是一个简单的过程视图:

  1. $ resource服务启动请求
  2. $ http服务发送请求并接收响应
  3. $ http服务转换响应(响应现在是实例Car)
  4. $ resource服务接收转换后的响应(来自$ http)
  5. $ resource service使用转换后的响应属性创建自己的实例(结果现在是$ resource的实例)

无论如何,我不建议装饰或扩展$ resource服务,因为使用$ http服务编写自己的实现更简单.