@@ -280,12 +280,17 @@ angular.module('ngResource', ['ng']).
280
280
url : function ( params ) {
281
281
var self = this ,
282
282
url = this . template ,
283
+ val ,
283
284
encodedVal ;
284
285
285
286
params = params || { } ;
286
287
forEach ( this . urlParams , function ( _ , urlParam ) {
287
- encodedVal = encodeUriSegment ( params [ urlParam ] || self . defaults [ urlParam ] || "" ) ;
288
- url = url . replace ( new RegExp ( ":" + urlParam + "(\\W)" ) , encodedVal + "$1" ) ;
288
+ if ( val = ( params [ urlParam ] || self . defaults [ urlParam ] ) ) {
289
+ encodedVal = encodeUriSegment ( val ) ;
290
+ url = url . replace ( new RegExp ( ":" + urlParam + "(\\W)" , "g" ) , encodedVal + "$1" ) ;
291
+ } else {
292
+ url = url . replace ( new RegExp ( "/?:" + urlParam + "(\\W)" , "g" ) , '$1' ) ;
293
+ }
289
294
} ) ;
290
295
url = url . replace ( / \/ ? # $ / , '' ) ;
291
296
var query = [ ] ;
@@ -306,8 +311,9 @@ angular.module('ngResource', ['ng']).
306
311
307
312
actions = extend ( { } , DEFAULT_ACTIONS , actions ) ;
308
313
309
- function extractParams ( data ) {
314
+ function extractParams ( data , actionParams ) {
310
315
var ids = { } ;
316
+ paramDefaults = extend ( paramDefaults , actionParams ) ;
311
317
forEach ( paramDefaults || { } , function ( value , key ) {
312
318
ids [ key ] = value . charAt && value . charAt ( 0 ) == '@' ? getter ( data , value . substr ( 1 ) ) : value ;
313
319
} ) ;
@@ -362,7 +368,7 @@ angular.module('ngResource', ['ng']).
362
368
var value = this instanceof Resource ? this : ( action . isArray ? [ ] : new Resource ( data ) ) ;
363
369
$http ( {
364
370
method : action . method ,
365
- url : route . url ( extend ( { } , extractParams ( data ) , action . params || { } , params ) ) ,
371
+ url : route . url ( extend ( { } , extractParams ( data , action . params || { } ) , params ) ) ,
366
372
data : data ,
367
373
headers : extend ( { } , action . headers || { } )
368
374
} ) . then ( function ( response ) {
0 commit comments