@@ -115,8 +115,10 @@ function $StateProvider( $urlRouterProvider, $urlMatcherFactory, $
115
115
116
116
// Register the state in the global state list and with $urlRouter if necessary.
117
117
if ( ! state [ 'abstract' ] && url ) {
118
- $urlRouterProvider . when ( url , [ '$match' , function ( $match ) {
119
- if ( $state . $current . navigable != state ) $state . transitionTo ( state , $match , false ) ;
118
+ $urlRouterProvider . when ( url , [ '$match' , '$stateParams' , function ( $match , $stateParams ) {
119
+ if ( $state . $current . navigable != state || ! equalForKeys ( $match , $stateParams ) ) {
120
+ $state . transitionTo ( state , $match , false ) ;
121
+ }
120
122
} ] ) ;
121
123
}
122
124
states [ name ] = state ;
@@ -357,25 +359,31 @@ function $StateProvider( $urlRouterProvider, $urlMatcherFactory, $
357
359
} ) ;
358
360
}
359
361
360
- function normalize ( keys , values ) {
361
- var normalized = { } ;
362
+ return $state ;
363
+ }
362
364
363
- forEach ( keys , function ( name ) {
364
- var value = values [ name ] ;
365
- normalized [ name ] = ( value != null ) ? String ( value ) : null ;
366
- } ) ;
367
- return normalized ;
368
- }
365
+ function normalize ( keys , values ) {
366
+ var normalized = { } ;
369
367
370
- function equalForKeys ( a , b , keys ) {
371
- for ( var i = 0 ; i < keys . length ; i ++ ) {
372
- var k = keys [ i ] ;
373
- if ( a [ k ] != b [ k ] ) return false ; // Not '===', values aren't necessarily normalized
374
- }
375
- return true ;
368
+ forEach ( keys , function ( name ) {
369
+ var value = values [ name ] ;
370
+ normalized [ name ] = ( value != null ) ? String ( value ) : null ;
371
+ } ) ;
372
+ return normalized ;
373
+ }
374
+
375
+ function equalForKeys ( a , b , keys ) {
376
+ // If keys not provided, assume keys from object 'a'
377
+ if ( ! keys ) {
378
+ keys = [ ] ;
379
+ for ( var n in a ) keys . push ( n ) ; // Used instead of Object.keys() for IE8 compatibility
376
380
}
377
381
378
- return $state ;
382
+ for ( var i = 0 ; i < keys . length ; i ++ ) {
383
+ var k = keys [ i ] ;
384
+ if ( a [ k ] != b [ k ] ) return false ; // Not '===', values aren't necessarily normalized
385
+ }
386
+ return true ;
379
387
}
380
388
}
381
389
0 commit comments