2014-01-28 2 views
3

Есть ли способ установить transformResponse после инициализации $resource?

У меня в основном расширенный $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 ok, так есть способ добиться чего-то похожего на то, что я пытаюсь? – 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; 
    }); 
}); 
Смежные вопросы