如何使用angular-ui-utils将活动类应用于navbar?

时间:2013-11-15 02:07:36

标签: javascript angularjs angular-ui

我是angularJS的初学者,我正在使用node / bower / grunt为angularJS中的单页应用程序开发ui,我安装了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: '/'
  });
})

3 个答案:

答案 0 :(得分:2)

查看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: '/'
  });
});

答案 1 :(得分:0)

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;
    }
}

答案 2 :(得分:0)

我建议你使用带有命名状态的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>