From 2b7e9db2075d16869232aecbf33b5fb44462bc48 Mon Sep 17 00:00:00 2001 From: Caitlin Potter Date: Mon, 27 Jan 2014 14:04:45 -0500 Subject: [PATCH] fix(ngResource): don't append number to '$' in url param value when encoding URI Previously, if a URL parameter value included a $, it would replace the dollar sign with a literal '$1' for mysterious reasons. Using a function rather than a replacement string circumvents this behaviour and produces a more expected result. Closes #6003 --- src/ngResource/resource.js | 4 +++- test/ngResource/resourceSpec.js | 2 ++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/ngResource/resource.js b/src/ngResource/resource.js index 006f3d3799a2..055f089023ad 100644 --- a/src/ngResource/resource.js +++ b/src/ngResource/resource.js @@ -387,7 +387,9 @@ angular.module('ngResource', ['ng']). val = params.hasOwnProperty(urlParam) ? params[urlParam] : self.defaults[urlParam]; if (angular.isDefined(val) && val !== null) { encodedVal = encodeUriSegment(val); - url = url.replace(new RegExp(":" + urlParam + "(\\W|$)", "g"), encodedVal + "$1"); + url = url.replace(new RegExp(":" + urlParam + "(\\W|$)", "g"), function(match, p1) { + return encodedVal + p1; + }); } else { url = url.replace(new RegExp("(\/?):" + urlParam + "(\\W|$)", "g"), function(match, leadingSlashes, tail) { diff --git a/test/ngResource/resourceSpec.js b/test/ngResource/resourceSpec.js index b23f0ca42bd7..08c27a0f715b 100644 --- a/test/ngResource/resourceSpec.js +++ b/test/ngResource/resourceSpec.js @@ -178,9 +178,11 @@ describe("resource", function() { $httpBackend.expect('GET', '/Path/foo%231').respond('{}'); $httpBackend.expect('GET', '/Path/doh!@foo?bar=baz%231').respond('{}'); + $httpBackend.expect('GET', '/Path/herp$').respond('{}'); R.get({a: 'foo#1'}); R.get({a: 'doh!@foo', bar: 'baz#1'}); + R.get({a: 'herp$'}); });