@@ -179,12 +179,17 @@ function $StateRefDynamicDirective($state, $timeout) {
179
179
var group = [ attrs . uiState , attrs . uiStateParams || null , attrs . uiStateOpts || null ] ;
180
180
var watch = '[' + group . map ( function ( val ) { return val || 'null' ; } ) . join ( ', ' ) + ']' ;
181
181
var def = { state : null , params : null , options : null , href : null } ;
182
+ var unlinkInfoFn = null ;
182
183
183
184
function runStateRefLink ( group ) {
184
185
def . state = group [ 0 ] ; def . params = group [ 1 ] ; def . options = group [ 2 ] ;
185
186
def . href = $state . href ( def . state , def . params , def . options ) ;
186
187
187
- if ( active ) active . $$addStateInfo ( def . state , def . params ) ;
188
+ if ( unlinkInfoFn ) {
189
+ unlinkInfoFn ( ) ;
190
+ unlinkInfoFn = null ;
191
+ }
192
+ if ( active ) unlinkInfoFn = active . $$addStateInfo ( def . state , def . params ) ;
188
193
if ( def . href ) attrs . $set ( type . attr , def . href ) ;
189
194
}
190
195
@@ -325,8 +330,9 @@ function $StateRefActiveDirective($state, $stateParams, $interpolate, $transitio
325
330
if ( isObject ( uiSrefActive ) && states . length > 0 ) {
326
331
return ;
327
332
}
328
- addState ( newState , newParams , uiSrefActive ) ;
333
+ var deregister = addState ( newState , newParams , uiSrefActive ) ;
329
334
update ( ) ;
335
+ return deregister ;
330
336
} ;
331
337
332
338
$scope . $on ( '$stateChangeSuccess' , update ) ;
@@ -338,13 +344,19 @@ function $StateRefActiveDirective($state, $stateParams, $interpolate, $transitio
338
344
var state = $state . get ( stateName , stateContext ( $element ) ) ;
339
345
var stateHash = createStateHash ( stateName , stateParams ) ;
340
346
341
- states . push ( {
347
+ var stateInfo = {
342
348
state : state || { name : stateName } ,
343
349
params : stateParams ,
344
350
hash : stateHash
345
- } ) ;
351
+ } ;
346
352
353
+ states . push ( stateInfo ) ;
347
354
activeClasses [ stateHash ] = activeClass ;
355
+
356
+ return function removeState ( ) {
357
+ var idx = states . indexOf ( stateInfo ) ;
358
+ if ( idx !== - 1 ) states . splice ( idx , 1 ) ;
359
+ }
348
360
}
349
361
350
362
/**
0 commit comments