Как применить активный класс к 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>