@@ -110,7 +110,7 @@ function $StateRefDirective($state, $timeout) {
110110
111111 var activeDirective = uiSrefActive [ 1 ] || uiSrefActive [ 0 ] ;
112112 if ( activeDirective ) {
113- activeDirective . $$setStateInfo ( ref . state , params ) ;
113+ activeDirective . $$addStateInfo ( ref . state , params ) ;
114114 }
115115 if ( newHref === null ) {
116116 nav = false ;
@@ -229,36 +229,50 @@ function $StateRefActiveDirective($state, $stateParams, $interpolate) {
229229 return {
230230 restrict : "A" ,
231231 controller : [ '$scope' , '$element' , '$attrs' , function ( $scope , $element , $attrs ) {
232- var state , params , activeClass ;
232+ var states = [ ] , activeClass ;
233233
234234 // There probably isn't much point in $observing this
235235 // uiSrefActive and uiSrefActiveEq share the same directive object with some
236236 // slight difference in logic routing
237237 activeClass = $interpolate ( $attrs . uiSrefActiveEq || $attrs . uiSrefActive || '' , false ) ( $scope ) ;
238238
239239 // 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+ }
244249 } ;
245250
246251 $scope . $on ( '$stateChangeSuccess' , update ) ;
247252
248253 // Update route state
249254 function update ( ) {
250- if ( isMatch ( ) ) {
255+ if ( anyMatch ( ) ) {
251256 $element . addClass ( activeClass ) ;
252257 } else {
253258 $element . removeClass ( activeClass ) ;
254259 }
255260 }
256261
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 ) {
258272 if ( typeof $attrs . uiSrefActiveEq !== 'undefined' ) {
259- return state && $state . is ( state . name , params ) ;
273+ return $state . is ( state . name , params ) ;
260274 } else {
261- return state && $state . includes ( state . name , params ) ;
275+ return $state . includes ( state . name , params ) ;
262276 }
263277 }
264278 } ]
0 commit comments