Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Set $resource transformResponse after initialization

Is there anyway to set the transformResponse after initialization of a $resource?

I basically have an extended $resource, but I want to attach a transformResponse to the extended version, and not the original.

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;
});

So in that example I want to set the transformResponse to something like this (only in 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;
    }
  }
});

The purpose for this is to check if any object have been changed before saving them in bulk.

If I'm am way off the par, can you suggest a better way to achieve this?

like image 252
Petah Avatar asked Mar 20 '26 03:03

Petah


1 Answers

Seems like you could just tap into the $promise that $resource gives you...

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;
  });
});
like image 50
J.Wells Avatar answered Mar 22 '26 16:03

J.Wells