-
Notifications
You must be signed in to change notification settings - Fork 3k
Description
As the title states, when using ui-sref-active or ui-sref-active-eq on a dynamically generated element, such as one created via ng-repeat, the element is not always ready for classes to be applied when $stateChangeSuccess is fired. This causes the classes to not apply on the initial state load, but they are applied on subsequent state changes.
Sample markup:
<ul>
<li ng-repeat="nav in vm.navItems" ui-sref-active-eq="current" class="{{nav.classes}}">
<a ui-sref="{{nav.state}}">
<span ng-bind="nav.text"></span>
</a>
</li>
</ul>Although UI Router matches the state properly, the update() fails to apply the classes as $element is not yet available on the DOM.
In the above code, removing the {{nav.classes}} resolves the issue, which leads me to believe it's simply a race condition between the DOM and UI Router. Wrapping the $element.addClass(activeClass) in a $timeout resolves the issue, though it causes numerous unit tests to fail.