I'm using AngularUI's routing and I'd like to do a ng-class="{active: current.state}" but I'm unsure how to exactly detect the current state in a directive like this.
 
    
    - 60,438
- 111
- 314
- 488
5 Answers
Update:
This answer was for a much older release of Ui-Router. For the more recent releases (0.2.5+), please use the helper directive ui-sref-active. Details here.
Original Answer:
Include the $state service in your controller. You can assign this service to a property on your scope.
An example:
$scope.$state = $state;
Then to get the current state in your templates:
$state.current.name
To check if a state is current active:
$state.includes('stateName'); 
This method returns true if the state is included, even if it's part of a nested state. If you were at a nested state, user.details, and you checked for $state.includes('user'), it'd return true.
In your class example, you'd do something like this:
ng-class="{active: $state.includes('stateName')}"
 
    
    - 4,592
- 4
- 22
- 12
- 
                    3What about for states that have parameters? – Bradley Trager Dec 27 '13 at 04:19
- 
                    3https://github.com/angular-ui/ui-router/wiki/Quick-Reference#stateincludesstatename--params – Matt Way Jan 09 '14 at 00:06
Also you can use ui-sref-active directive:
<ul>
  <li ui-sref-active="active" class="item">
    <a href ui-sref="app.user({user: 'bilbobaggins'})">@bilbobaggins</a>
  </li>
  <!-- ... -->
</ul>
Or filters:
"stateName" | isState & "stateName" | includedByState
 
    
    - 1,434
- 1
- 10
- 5
If you are using ui-router, try $state.is();
You can use it like so:
$state.is('stateName');
Per the documentation:
$state.is ... similar to $state.includes, but only checks for the full state name.
 
    
    - 18,334
- 18
- 100
- 135
 
    
    - 675
- 9
- 18
Check out angular-ui, specifically, route checking: http://angular-ui.github.io/ui-utils/
 
    
    - 6,262
- 2
- 27
- 35
