@@ -107,7 +107,7 @@ function $StateRefDirective($state, $timeout) {
107
107
108
108
var activeDirective = uiSrefActive [ 1 ] || uiSrefActive [ 0 ] ;
109
109
if ( activeDirective ) {
110
- activeDirective . $$setStateInfo ( ref . state , params ) ;
110
+ activeDirective . $$addStateInfo ( ref . state , params ) ;
111
111
}
112
112
if ( newHref === null ) {
113
113
nav = false ;
@@ -226,36 +226,50 @@ function $StateRefActiveDirective($state, $stateParams, $interpolate) {
226
226
return {
227
227
restrict : "A" ,
228
228
controller : [ '$scope' , '$element' , '$attrs' , function ( $scope , $element , $attrs ) {
229
- var state , params , activeClass ;
229
+ var states = [ ] , activeClass ;
230
230
231
231
// There probably isn't much point in $observing this
232
232
// uiSrefActive and uiSrefActiveEq share the same directive object with some
233
233
// slight difference in logic routing
234
234
activeClass = $interpolate ( $attrs . uiSrefActiveEq || $attrs . uiSrefActive || '' , false ) ( $scope ) ;
235
235
236
236
// Allow uiSref to communicate with uiSrefActive[Equals]
237
- this . $$setStateInfo = function ( newState , newParams ) {
238
- state = $state . get ( newState , stateContext ( $element ) ) ;
239
- params = newParams ;
240
- update ( ) ;
237
+ this . $$addStateInfo = function ( newState , newParams ) {
238
+ var state = $state . get ( newState , stateContext ( $element ) ) ;
239
+ if ( state ) {
240
+ states . push ( {
241
+ state : state ,
242
+ params : newParams
243
+ } ) ;
244
+ update ( ) ;
245
+ }
241
246
} ;
242
247
243
248
$scope . $on ( '$stateChangeSuccess' , update ) ;
244
249
245
250
// Update route state
246
251
function update ( ) {
247
- if ( isMatch ( ) ) {
252
+ if ( anyMatch ( ) ) {
248
253
$element . addClass ( activeClass ) ;
249
254
} else {
250
255
$element . removeClass ( activeClass ) ;
251
256
}
252
257
}
253
258
254
- function isMatch ( ) {
259
+ function anyMatch ( ) {
260
+ for ( var i = 0 ; i < states . length ; i ++ ) {
261
+ if ( isMatch ( states [ i ] . state , states [ i ] . params ) ) {
262
+ return true ;
263
+ }
264
+ }
265
+ return false ;
266
+ }
267
+
268
+ function isMatch ( state , params ) {
255
269
if ( typeof $attrs . uiSrefActiveEq !== 'undefined' ) {
256
- return state && $state . is ( state . name , params ) ;
270
+ return $state . is ( state . name , params ) ;
257
271
} else {
258
- return state && $state . includes ( state . name , params ) ;
272
+ return $state . includes ( state . name , params ) ;
259
273
}
260
274
}
261
275
} ]
0 commit comments