diff --git a/src/ngResource/resource.js b/src/ngResource/resource.js index f2e7ff624f8f..5d61ce823278 100644 --- a/src/ngResource/resource.js +++ b/src/ngResource/resource.js @@ -433,7 +433,7 @@ angular.module('ngResource', ['ng']). var ids = {}; actionParams = extend({}, paramDefaults, actionParams); forEach(actionParams, function(value, key){ - if (isFunction(value)) { value = value(); } + if (isFunction(value)) { value = value(data); } ids[key] = value && value.charAt && value.charAt(0) == '@' ? lookupDottedPath(data, value.substr(1)) : value; }); diff --git a/test/ngResource/resourceSpec.js b/test/ngResource/resourceSpec.js index 5b75c8cfdca6..0f3bc52b2afb 100644 --- a/test/ngResource/resourceSpec.js +++ b/test/ngResource/resourceSpec.js @@ -499,7 +499,6 @@ describe("resource", function() { var currentGroup = 'students', Person = $resource('/Person/:group/:id', { group: function() { return currentGroup; }}); - $httpBackend.expect('GET', '/Person/students/fedor').respond({id: 'fedor', email: 'f@f.com'}); var fedor = Person.get({id: 'fedor'}); @@ -509,6 +508,29 @@ describe("resource", function() { }); + it('should pass resource object to dynamic default parameters', function() { + var Person = $resource('/Person/:id', { + id: function(data) { + return data ? data.id : 'fedor'; + } + }); + + $httpBackend.expect('GET', '/Person/fedor').respond( + {id: 'fedor', email: 'f@f.com', count: 1}); + + var fedor = Person.get(); + $httpBackend.flush(); + + expect(fedor).toEqualData({id: 'fedor', email: 'f@f.com', count: 1}); + + $httpBackend.expect('POST', '/Person/fedor').respond( + {id: 'fedor', email: 'f@f.com', count: 2}); + fedor.$save(); + $httpBackend.flush(); + expect(fedor).toEqualData({id: 'fedor', email: 'f@f.com', count: 2}); + }); + + it('should support dynamic default parameters (action specific)', function() { var currentGroup = 'students', Person = $resource('/Person/:group/:id', {}, {