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