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