Как применить активный класс к navbar с помощью angular -ui-utils?

Я начинаю знаком с angularJS, и я разрабатываю ui для одностраничного приложения в angularJS, используя node/bower/grunt, и я установил angular -ui-bootstrap, а также утилиты маршрута и событий от angular -ui-utils.
Я использовал ng-class={active:$uiRoute} в элементах меню, но когда выбран пункт меню, активный класс не применяется... обрабатывает ли это $uiRoute или мне нужно его код отдельно?

Извинения за задание тупого вопроса...
Вот код:

`<div class="collapse navbar-collapse">
  <ul class="nav navbar-nav">
    <li ui-route="/" ng-class="{active:$uiRoute}"><a href="#/">Home</a></li>
    <li ui-route="/about" ng-class="{active:$uiRoute}"><a href="#/about">About</a></li>
    <li ui-route="/other" ng-class="{active:$uiRoute}"><a href="#/other">Other</a></li>
  </ul>
</div>
...
<script src="bower_components/angular-ui-utils/modules/route/route.js"></script>
<script src="bower_components/angular-ui-utils/modules/event/event.js"></script>`

и

angular.module('myApp', ['ngRoute','ngResource','ui.bootstrap'])
.config(function ($routeProvider) {
$routeProvider
.when('/', {
    templateUrl: 'views/main.html',
    controller: 'MainCtrl'
  })
  .when('/about', {
      templateUrl: 'views/about.html',
      controller: 'AboutCtrl'
  })
  .when('/other', {
    templateUrl: 'views/other.html',
    controller: 'OtherCtrl'
  })
  .otherwise({
    redirectTo: '/'
  });
})

Ответ 1

Просматривая ui-utils docs, похоже, вы не ввели зависимость модуля. Измените myApp, чтобы ввести ui.utils

angular.module('myApp', [
    'ngRoute',
    'ngResource',
    'ui.bootstrap',
    'ui.utils'
])
.config(function ($routeProvider) {
$routeProvider
.when('/', {
    templateUrl: 'views/main.html',
    controller: 'MainCtrl'
  })
  .when('/about', {
      templateUrl: 'views/about.html',
      controller: 'AboutCtrl'
  })
  .when('/other', {
    templateUrl: 'views/other.html',
    controller: 'OtherCtrl'
  })
  .otherwise({
    redirectTo: '/'
  });
});

Ответ 2

add ng-class="{'active':isActive('/about')}"

.run([ '$rootScope', '$location', function($rootScope, $location, ) {
    $rootScope.isActive = function(path) {
         if ($location.path() && $location.path().substring(0, path.length) == path) {
            return true;
         }
         return false;
    }
}

Ответ 3

Я советую вам использовать UI-маршрутизатор с указанными состояниями.

Ваш маршрутизатор будет выглядеть так:

angular
  .module('myApp', ['ui.router'])
  .config(($stateProvider, urlRouterProvider) => {
    $stateProvider
      .state('index', {
        url: '/',
        templateUrl: 'views/main.html',
        controller: 'MainCtrl',
      })
      .state('index.about', {
        url: 'about/'
        templateUrl: 'views/about.html',
        controller: 'AboutCtrl'
      });
    $urlRouterProvider.otherwise('/');
  });

и вы сможете использовать ui-sref-active директиву в своем шаблоне, например:

<div class="collapse navbar-collapse">
  <ul class="nav navbar-nav">
    <li ui-sref-active="{ 'active': 'index' }">
      <a href="" ui-sref="index">Home</a>
    </li>
    <li ui-sref-active="{ 'active': 'index.about' }">
      <a href="" ui-sref="index.about">About</a>
    </li>
  </ul>
</div>