AngularJS transformResponse

时间:2014-02-02 19:59:49

标签: 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 < / p>

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

或者我必须编写自己的“资源”实现吗?

1 个答案:

答案 0 :(得分:16)

transformResponse$http级别执行。

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

$ resource service将从您的响应数据中实例化新对象(已经由transformResponse回调转换),这个新对象将是$ resource本身的一个实例。

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

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

  1. $ resource service发起请求
  2. $ http服务发送请求并收到回复
  3. $ http服务转换响应(响应现在是Car的实例)
  4. $ resource service接收转换后的响应(来自$ http)
  5. $ resource service使用转换后的响应属性(结果现在是$ resource的实例)生成自己的实例
  6. 无论如何,我不建议装饰或扩展$ resource服务,因为使用$ http服务编写自己的实现更简单。