2014-01-28 61 views
3

無論如何在$resource初始化後設置transformResponse

我基本上有一個擴展$resource,但我想附加一個transformResponse擴展版本,而不是原來的。

angular.module("services").factory('MyObject', function($resource) { 
    var MyObject = $resource('/my/object.json'); 

    MyObject.prototype.someBusinessLogic = function() {}; 

    return MyObject; 
}); 


angular.module("services").factory('MyExtendedObject', function($resource, MyObject) { 
    MyObject.prototype.someExtendedBusinessLogic = function() {}; 

    return MyObject; 
}); 

所以在這個例子中,我想將transformResponse設置是這樣的(僅在MyExtendedObject):

$resource('/my/object.json', {}, { 
    query: { 
    method: 'GET', 
    isArray: true, 
    transformResponse: function(data) { 
     var objects = angular.fromJson(data); 
     for (var i = 0; i < objects.length; i++) { 
     objects[i] = new MyExtendedObject(objects[i]); 
     objects[i].hash = JSON.stringify(objects[i]); 
     } 
     return objects; 
    } 
    } 
}); 

這樣做的目的是爲了檢查是否有任何對象已更改保存之前散裝。

如果我的表現不盡如人意,您能否提出一個更好的方法來實現這一目標?

+0

你修改MyObject'的'原型爲'MyExtendedObject'你的工廠函數,所以你不創建第二種資源類型,所以不存在「僅在'MyExtendedObject」中。 – imaginaryboy

+0

@imaginaryboy好吧,有沒有辦法實現類似於我正在嘗試的操作? – Petah

回答

1

好像你可以只打入$promise$resource給你...

angular.module("services").factory('MyExtendedObject', function($resource, MyObject) { 
MyObject.get({whatever:'here'}).$promise.then(function(result){ 
    var transformedStuff = result; 
    //<!--do transform stuff here--> 
    return transformedStuff; 
    }); 
});