부트 스트랩에 항목이있는 탐색 막대가있는 경우
Home | About | Contact
각 메뉴 항목이 활성 일 때 활성 클래스를 설정하려면 어떻게합니까? 즉, class="active"
각도 경로가있을 때 어떻게 설정할 수 있습니까
#/
집에#/about
정보 페이지#/contact
연락처 페이지
부트 스트랩에 항목이있는 탐색 막대가있는 경우
Home | About | Contact
각 메뉴 항목이 활성 일 때 활성 클래스를 설정하려면 어떻게합니까? 즉, class="active"
각도 경로가있을 때 어떻게 설정할 수 있습니까
#/
집에#/about
정보 페이지#/contact
연락처 페이지답변:
매우 우아한 방법은 ng-controller를 사용하여 ng-view 외부에서 단일 컨트롤러를 실행하는 것입니다.
<div class="collapse navbar-collapse" ng-controller="HeaderController">
<ul class="nav navbar-nav">
<li ng-class="{ active: isActive('/')}"><a href="/">Home</a></li>
<li ng-class="{ active: isActive('/dogs')}"><a href="/dogs">Dogs</a></li>
<li ng-class="{ active: isActive('/cats')}"><a href="/cats">Cats</a></li>
</ul>
</div>
<div ng-view></div>
그리고 controllers.js에 포함하십시오 :
function HeaderController($scope, $location)
{
$scope.isActive = function (viewLocation) {
return viewLocation === $location.path();
};
}
return $location.path().indexOf(viewLocation) == 0;
대신 매개 변수를 사용하여 페이지를 잡을 수 있도록 대신 사용 하는 것이 좋습니다
elegant
-경로 이름을 예를 들어 /dogs
호출에 복제해야합니다isActive('/dogs')
ui-sref-active/ui-sref-active-eq
지시문을 사용할 수 있습니다 . ui-sref-active-eq='active'
또는 ui-sref-active='active'
동일한 결과를 달성하기 위해
방금 이것을 처리하기위한 지시문을 작성 했으므로 단순히 bs-active-link
부모 <ul>
요소에 속성 을 추가 할 수 있으며 경로가 변경 될 때마다 일치하는 링크를 찾아서active
다음 해당하는 클래스를<li>
.
여기에서 실제로 볼 수 있습니다. http://jsfiddle.net/8mcedv3b/
HTML 예 :
<ul class="nav navbar-nav" bs-active-link>
<li><a href="/home">Home</a></li>
<li><a href="/contact">Contact</a></li>
</ul>
자바 스크립트 :
angular.module('appName')
.directive('bsActiveLink', ['$location', function ($location) {
return {
restrict: 'A', //use as attribute
replace: false,
link: function (scope, elem) {
//after the route has changed
scope.$on("$routeChangeSuccess", function () {
var hrefs = ['/#' + $location.path(),
'#' + $location.path(), //html5: false
$location.path()]; //html5: true
angular.forEach(elem.find('a'), function (a) {
a = angular.element(a);
if (-1 !== hrefs.indexOf(a.attr('href'))) {
a.parent().addClass('active');
} else {
a.parent().removeClass('active');
};
});
});
}
}
}]);
AngularStrap을 볼 수 있습니다 지시문은 찾고있는 것 같습니다.
https://github.com/mgcrea/angular-strap/blob/master/src/navbar/navbar.js
.directive('bsNavbar', function($location) {
'use strict';
return {
restrict: 'A',
link: function postLink(scope, element, attrs, controller) {
// Watch for the $location
scope.$watch(function() {
return $location.path();
}, function(newValue, oldValue) {
$('li[data-match-route]', element).each(function(k, li) {
var $li = angular.element(li),
// data('match-rout') does not work with dynamic attributes
pattern = $li.attr('data-match-route'),
regexp = new RegExp('^' + pattern + '$', ['i']);
if(regexp.test(newValue)) {
$li.addClass('active');
} else {
$li.removeClass('active');
}
});
});
}
};
});
이 지시문을 사용하려면
http://mgcrea.github.io/angular-strap/ 에서 AngularStrap을 다운로드 하십시오
bootstrap.js 다음에 페이지에 스크립트를 포함 시키십시오.
<script src="lib/angular-strap.js"></script>
지시문을 모듈에 추가하십시오.
angular.module('myApp', ['$strap.directives'])
탐색 표시 줄에 지시문을 추가하십시오.
<div class="navbar" bs-navbar>
각 탐색 항목에 정규식을 추가하십시오.
<li data-match-route="/about"><a href="#/about">About</a></li>
scope.$watch
)
element
변수가 jquery 선택기에 전달되는 이유는 무엇 입니까? $('...', element)
mgcrea.ngStrap
되지 않았습니다.$strap.directives
다음은 Angular와 잘 작동하는 간단한 접근 방식입니다.
<ul class="nav navbar-nav">
<li ng-class="{ active: isActive('/View1') }"><a href="#/View1">View 1</a></li>
<li ng-class="{ active: isActive('/View2') }"><a href="#/View2">View 2</a></li>
<li ng-class="{ active: isActive('/View3') }"><a href="#/View3">View 3</a></li>
</ul>
AngularJS 컨트롤러 내에서 :
$scope.isActive = function (viewLocation) {
var active = (viewLocation === $location.path());
return active;
};
Angular 라우터로 작업하는 경우 RouterLinkActive 지시문 을 정말 우아하게 사용할 수 있습니다.
<ul class="navbar-nav">
<li class="nav-item"><a class="nav-link" routerLink="home" routerLinkActive="active">Home</a></li>
<li class="nav-item"><a class="nav-link" routerLink="gallery" routerLinkActive="active">Gallery</a></li>
<li class="nav-item"><a class="nav-link" routerLink="pricing" routerLinkActive="active">Prices</a></li>
<li class="nav-item"><a class="nav-link" routerLink="contact" routerLinkActive="active">Contact</a></li>
</ul>
active
클래스는 <li>
(routerLink 또는 그 부모와 함께 routerLinkActive를 넣을 수 있습니다)
/
홈 페이지로, routerLinkActive
로 시작하는 URL에 대한 그 활성을 고려할 것 /
, 예를 들어 /foo/
, /foo/bar
정확하게 일치하기 등, 당신이 필요 routerLinkActive="active" [routerLinkActiveOptions]="{exact:true}"
.
우선,이 문제는 많은 방법으로 해결 될 수 있습니다. 이 방법은 가장 우아하지는 않지만 확실히 작동합니다.
다음은 모든 프로젝트에 추가 할 수있는 간단한 솔루션입니다. 키 오프에 사용할 경로를 구성 할 때 "pageKey"또는 다른 속성을 추가하면됩니다. 또한 $ route 객체의 $ routeChangeSuccess 메서드에서 리스너를 구현하여 경로 변경이 성공적으로 완료되었음을 수신 할 수 있습니다.
핸들러가 시작되면 페이지 키를 얻고이 키를 사용하여이 페이지에 대해 "ACTIVE"여야하는 요소를 찾고 ACTIVE 클래스를 적용하십시오.
모든 요소를 "활성 상태"로 만드는 방법이 필요합니다. 보시다시피 내 탐색 항목에서 .pageKey 클래스를 사용하여 모든 항목을 끄고 .pageKey_ {PAGEKEY}를 사용하여 개별적으로 켤 수 있습니다. 그것들을 모두 비활성으로 전환하는 것은 순진한 접근 방식으로 간주되며 잠재적으로 이전 경로를 사용하여 활성 항목 만 비활성 상태로 만들거나 jquery 선택기를 변경하여 활성 항목 만 선택하여 비활성 상태로 만들 수 있습니다. jquery를 사용하여 모든 활성 항목을 선택하는 것이 가장 좋은 솔루션 일 것입니다. 이전 경로에있을 수있는 CSS 버그가있는 경우 현재 경로에 대한 모든 것이 정리되도록하기 때문입니다.
이 코드 줄을 변경한다는 의미는 다음과 같습니다.
$(".pagekey").toggleClass("active", false);
이것에
$(".active").toggleClass("active", false);
샘플 코드는 다음과 같습니다.
부트 스트랩 navbar가 주어지면
<div class="navbar navbar-inverse">
<div class="navbar-inner">
<a class="brand" href="#">Title</a>
<ul class="nav">
<li><a href="#!/" class="pagekey pagekey_HOME">Home</a></li>
<li><a href="#!/page1/create" class="pagekey pagekey_CREATE">Page 1 Create</a></li>
<li><a href="#!/page1/edit/1" class="pagekey pagekey_EDIT">Page 1 Edit</a></li>
<li><a href="#!/page1/published/1" class="pagekey pagekey_PUBLISH">Page 1 Published</a></li>
</ul>
</div>
</div>
그리고 다음과 같은 각도 모듈과 컨트롤러 :
<script type="text/javascript">
function Ctrl($scope, $http, $routeParams, $location, $route) {
}
angular.module('BookingFormBuilder', []).
config(function ($routeProvider, $locationProvider) {
$routeProvider.
when('/', {
template: 'I\'m on the home page',
controller: Ctrl,
pageKey: 'HOME' }).
when('/page1/create', {
template: 'I\'m on page 1 create',
controller: Ctrl,
pageKey: 'CREATE' }).
when('/page1/edit/:id', {
template: 'I\'m on page 1 edit {id}',
controller: Ctrl, pageKey: 'EDIT' }).
when('/page1/published/:id', {
template: 'I\'m on page 1 publish {id}',
controller: Ctrl, pageKey: 'PUBLISH' }).
otherwise({ redirectTo: '/' });
$locationProvider.hashPrefix("!");
}).run(function ($rootScope, $http, $route) {
$rootScope.$on("$routeChangeSuccess",
function (angularEvent,
currentRoute,
previousRoute) {
var pageKey = currentRoute.pageKey;
$(".pagekey").toggleClass("active", false);
$(".pagekey_" + pageKey).toggleClass("active", true);
});
});
</script>
실제로 angular-ui-utils ' ui-route
지시문을 사용할 수 있습니다 .
<a ui-route ng-href="/">Home</a>
<a ui-route ng-href="/about">About</a>
<a ui-route ng-href="/contact">Contact</a>
또는:
/**
* Header controller
*/
angular.module('myApp')
.controller('HeaderCtrl', function ($scope) {
$scope.menuItems = [
{
name: 'Home',
url: '/',
title: 'Go to homepage.'
},
{
name: 'About',
url: '/about',
title: 'Learn about the project.'
},
{
name: 'Contact',
url: '/contact',
title: 'Contact us.'
}
];
});
<!-- index.html: -->
<div class="header" ng-controller="HeaderCtrl">
<ul class="nav navbar-nav navbar-right">
<li ui-route="{{menuItem.url}}" ng-class="{active: $uiRoute}"
ng-repeat="menuItem in menuItems">
<a ng-href="#{{menuItem.url}}" title="{{menuItem.title}}">
{{menuItem.name}}
</a>
</li>
</ul>
</div>
ui-utils를 사용 하는 경우 부분 / 중첩 된보기를 관리하기위한 ui-router 에 관심이있을 수 있습니다.
나는이 모든 대답을 조금 복잡하게 생각합니다. 죄송합니다. 그래서 나는 네비게이션 바마다 작동 해야하는 작은 지시문을 만들었습니다.
app.directive('activeLink', function () {
return {
link: function (scope, element, attrs) {
element.find('.nav a').on('click', function () {
angular.element(this)
.parent().siblings('.active')
.removeClass('active');
angular.element(this)
.parent()
.addClass('active');
});
}
};
});
용법:
<ul class="nav navbar-nav navbar-right" active-link>
<li class="nav active"><a href="home">Home</a></li>
<li class="nav"><a href="foo">Foo</a></li>
<li class="nav"><a href="bar">Bar</a></li>
</ul>
ng-class 지시문을 $ location과 함께 사용하여 달성합니다.
<ul class="nav">
<li data-ng-class="{active: ($location.path() == '/') }">
<a href="#/">Carpeta Amarilla</a>
</li>
<li class="dropdown" data-ng-class="{active: ($location.path() == '/auditoria' || $location.path() == '/auditoria/todos') }">
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
Auditoria
<b class="caret"></b>
</a>
<ul class="dropdown-menu pull-right">
<li data-ng-class="{active: ($location.path() == '/auditoria') }">
<a href="#/auditoria">Por Legajo</a>
</li>
<li data-ng-class="{active: ($location.path() == '/auditoria/todos') }">
<a href="#/auditoria/todos">General</a>
</li>
</ul>
</li>
</ul>
navbar가 다음과 같이 $ location 서비스에 액세스 할 수있는 기본 컨트롤러 내에 있어야합니다.
bajasApp.controller('MenuCntl', ['$scope','$route', '$routeParams', '$location',
function MenuCntl($scope, $route, $routeParams, $location) {
$scope.$route = $route;
$scope.$location = $location;
$scope.$routeParams = $routeParams;
}]);
다음과 같은 각도 표현의 조건부로이를 달성 할 수 있습니다.
<a href="#" class="{{ condition ? 'active' : '' }}">link</a>
즉,이 미니 로직을 많이 아웃소싱하면 코드베이스가 다소 오염 될 수 있지만 각도 지시어가 더 "적절한"방법이라고 생각합니다.
지시문을 만드는 것보다 조금 빠르기 때문에 개발 중에 가끔씩 GUI 스타일링을위한 조건을 사용합니다. 실제로 실제로 코드베이스에 오랫동안 남아있는 인스턴스는 말할 수 없었습니다. 결국 나는 그것을 지시어로 바꾸거나 문제를 해결하는 더 좋은 방법을 찾습니다.
ui-router 를 사용하는 경우 다음 예제는 컨트롤러 측 코드를 추가하지 않고 허용되는 답변에 대한 @DanPantry의 의견을 기반으로 요구를 충족시켜야합니다.
<div class="collapse navbar-collapse" ng-controller="HeaderController">
<ul class="nav navbar-nav">
<li ui-sref-active="active"><a ui-sref="app.home()" href="/">Home</a></li>
<li ui-sref-active="active"><a ui-sref="app.dogs()" href="/dogs">Dogs</a></li>
<li ui-sref-active="active"><a ui-sref="app.cats()" href="/cats">Cats</a></li>
</ul>
</div>
<div ng-view></div>
자세한 내용 은 문서 를 확인할 수 있습니다 .
ui.router
!
AngularStrap 을 사용하지 않으려면 이 지시문이 트릭을 수행해야합니다!. 이것은 https://stackoverflow.com/a/16231859/910764 의 수정입니다. .
자바 스크립트
angular.module('myApp').directive('bsNavbar', ['$location', function ($location) {
return {
restrict: 'A',
link: function postLink(scope, element) {
scope.$watch(function () {
return $location.path();
}, function (path) {
angular.forEach(element.children(), (function (li) {
var $li = angular.element(li),
regex = new RegExp('^' + $li.attr('data-match-route') + '$', 'i'),
isActive = regex.test(path);
$li.toggleClass('active', isActive);
}));
});
}
};
}]);
HTML
<ul class="nav navbar-nav" bs-navbar>
<li data-match-route="/home"><a href="#/home">Home</a></li>
<li data-match-route="/about"><a href="#/about">About</a></li>
</ul>
참고 : 위의 HTML 클래스는 Bootstrap 3.x를 사용한다고 가정합니다.
여기에 내가 가져 가라. 이 게시물에서 찾은 답변 조합 중 일부입니다. 약간 다른 경우가 있었으므로 내 솔루션에는 메뉴를 Directive Definition Ojbect 내에서 사용할 자체 템플릿으로 분리 한 다음 내 페이지 표시 줄을 필요한 페이지에 추가하는 것이 포함됩니다. 기본적으로 메뉴를 포함하고 싶지 않은 로그인 페이지가 있었으므로 ngInclude를 사용하고 로그인 할 때이 지시문을 삽입했습니다.
module.directive('compModal', function(){
return {
restrict: 'E',
replace: true,
transclude: true,
scope: true,
templateUrl: 'templates/menu.html',
controller: function($scope, $element, $location){
$scope.isActive = function(viewLocation){
var active = false;
if(viewLocation === $location.path()){
active = true;
}
return active;
}
}
}
});
<ul class="nav navbar-nav">
<li ng-class="{ active: isActive('/View1') }"><a href="#/View1">View 1</a></li>
<li ng-class="{ active: isActive('/View2') }"><a href="#/View2">View 2</a></li>
<li ng-class="{ active: isActive('/View3') }"><a href="#/View3">View 3</a></li>
</ul>
<comp-navbar/>
도움이 되었기를 바랍니다
myl 답변을 확장하면서 이와 같은 구조를 처리하기 위해 이것이 필요했습니다.
-인덱스
-events <-active
--- event-list
--- event-edit
--- event-map <-클릭
-places
--- place-list
--- place-edit
--- place-map
따라서 일치하는 대신 조건에 맞게 형식이 지정된 하위 링크의 유효성을 검사하기 위해 indexOf를 사용해야했습니다. 따라서 '이벤트'의 경우 :
<li ng-class="{ active: isActive('/event')}" class="divider-vertical dropdown">
function NavController($scope, $location) {
$scope.isActive = function (viewLocation) {
var s=false;
if($location.path().indexOf(viewLocation) != -1){
s = true;
}
return s;
};}
이것은 간단한 해결책입니다
<ul class="nav navbar-nav navbar-right navbar-default menu">
<li ng-class="menuIndice == 1 ? 'active':''">
<a ng-click="menuIndice = 1" href="#/item1">item1</a>
</li>
<li ng-class="menuIndice == 2 ? 'active':''">
<a ng-click="menuIndice = 2" href="#/item2">item2</a>
</li>
<li ng-class="menuIndice == 3 ? 'active':''">
<a ng-click="menuIndice = 3" href="#/item3">item3</a>
</li>
</ul>
@Olivier의 AngularStrap 답변과 함께 https://github.com/twbs/bootstrap/issues/9013 에서 kevinknelson의 답변을 구현했습니다 .
기본적으로 Bootstrap3 navbar는 단일 페이지 (예 : Angular) 응용 프로그램 용으로 설계되지 않았으므로 작은 화면에서 메뉴를 클릭 할 때 축소되지 않았습니다.
자바 스크립트
/**
* Main AngularJS Web Application
*/
var app = angular.module('yourWebApp', [
'ngRoute'
]);
/**
* Setup Main Menu
*/
app.controller('MainNavCtrl', [ '$scope', '$location', function ( $scope, $location) {
$scope.menuItems = [
{
name: 'Home',
url: '/home',
title: 'Welcome to our Website'
},
{
name: 'ABOUT',
url: '/about',
title: 'Know about our work culture'
},
{
name: 'CONTACT',
url: '/contact',
title: 'Get in touch with us'
}
];
$scope.isActive = function (viewLocation) {
return viewLocation === $location.path();
};
}]);
HTML
<div class="navbar-collapse collapse" ng-controller="MainNavCtrl">
<ul id="add-magic-line" class="nav navbar-nav navbar-right">
<li data-ng-class="{current_page_item: isActive('{{ menuItem.url }}')}" data-ng-repeat="menuItem in menuItems">
<a data-ng-href="#{{menuItem.url}}" title="{{menuItem.title}}">
{{menuItem.name}}
</a>
</li>
</ul>
</div>
덕분에 @Pylinux . 필자는 필자의 기술을 사용하여 "한"수준의 드롭 다운 메뉴 (sub ul / li)를 지원하도록 수정했습니다. 아래의 바이올린 링크에서 작동하는지 확인하십시오.
pylinux의 답변을 기반으로 업데이트 된 Fiddle- http: //jsfiddle.net/abhatia/en4qxw6g/
하나의 레벨 드롭 다운 메뉴를 지원하기 위해 다음 세 가지 사항을 변경했습니다.
1. li 아래의 "a"요소에 대한 클래스 값 dd (드롭 다운)를 추가하여 하위 목록이 필요합니다.
<li><a class="dd">This link points to #/fun5</a>
<ul>
<li><a href="#/fun6?some=data">This link points to #/fun6</a>
</li>
<li><a href="#/fun7?some=data">This link points to #/fun7</a>
</li>
<li><a href="#/fun8?some=data">This link points to #/fun8</a>
</li>
<li><a href="#/fun9?some=data">This link points to #/fun9</a>
</li>
</ul>
</li>
2. 다음 새로운 로직을 추가하도록 Javascript를 업데이트했습니다.
if(angular.element(li).parent().parent().children('a').hasClass("dd"))
{angular.element(li).parent().parent().children('a.dd').addClass('active');}
3. 다음을 추가하도록 CSS를 업데이트했습니다.
a.active {background-color:red;}
단일 레벨 드롭 다운 메뉴를 구현하려는 사람에게 도움이되기를 바랍니다.
개체를 스위치 변수로 사용하십시오.
다음과 같이 간단하게 인라인 할 수 있습니다.
<ul class="nav navbar-nav">
<li ng-class="{'active':switch.linkOne}" ng-click="switch = {linkOne: true}"><a href="/">Link One</a></li>
<li ng-class="{'active':switch.linkTwo}" ng-click="switch = {link-two: true}"><a href="/link-two">Link Two</a></li>
</ul>
링크를 클릭 할 때마다 스위치 개체는 올바른 스위치 개체 속성 만 적용되는 새 개체로 바뀝니다. 정의되지 않은 속성은 false로 평가되므로 속성에 종속 된 요소에는 활성 클래스가 할당되지 않습니다.
이 활성 링크 지시문을 사용할 수도 있습니다 https://stackoverflow.com/a/23138152/1387163을
위치가 / url 과 일치하면 부모 li은 활성 클래스를 얻습니다 .
<li>
<a href="#!/url" active-link active-link-parent>
</li>
링크에 지시문을 사용하는 것이 좋습니다. 여기 바이올린이 있습니다.
그러나 아직 완벽하지는 않습니다. 해시 뱅을 조심하십시오;)
지시문에 대한 자바 스크립트는 다음과 같습니다.
angular.module('link', []).
directive('activeLink', ['$location', function(location) {
return {
restrict: 'A',
link: function(scope, element, attrs, controller) {
var clazz = attrs.activeLink;
var path = attrs.href;
path = path.substring(1); //hack because path does not return including hashbang
scope.location = location;
scope.$watch('location.path()', function(newPath) {
if (path === newPath) {
element.addClass(clazz);
} else {
element.removeClass(clazz);
}
});
}
};
}]);
다음은 html에서 사용되는 방법입니다.
<div ng-app="link">
<a href="#/one" active-link="active">One</a>
<a href="#/two" active-link="active">One</a>
<a href="#" active-link="active">home</a>
</div>
이후 CSS로 스타일링하기 :
.active{ color:red; }
토론에 2 센트를 추가하기 위해 순수한 각도 모듈 (jquery 없음)을 만들었으며 데이터가 포함 된 해시 URL에서도 작동합니다. ( ig #/this/is/path?this=is&some=data
)
모듈을 종속성으로 그리고 auto-active
메뉴의 조상 중 하나에 추가하기 만하면 됩니다. 이처럼 :
<ul auto-active>
<li><a href="#/">main</a></li>
<li><a href="#/first">first</a></li>
<li><a href="#/second">second</a></li>
<li><a href="#/third">third</a></li>
</ul>
그리고 모듈은 다음과 같습니다 :
(function () {
angular.module('autoActive', [])
.directive('autoActive', ['$location', function ($location) {
return {
restrict: 'A',
scope: false,
link: function (scope, element) {
function setActive() {
var path = $location.path();
if (path) {
angular.forEach(element.find('li'), function (li) {
var anchor = li.querySelector('a');
if (anchor.href.match('#' + path + '(?=\\?|$)')) {
angular.element(li).addClass('active');
} else {
angular.element(li).removeClass('active');
}
});
}
}
setActive();
scope.$on('$locationChangeSuccess', setActive);
}
}
}]);
}());
* (물론 지시문 부분을 사용할 수 있습니다)
** 이것은 빈 해시 ( ig example.com/#
또는 just example.com
)에 대해서는 작동하지 않는다는 사실에 주목할 가치가 example.com/#/
있습니다 example.com#/
. 그러나 이것은 ngResource 등에서 자동으로 발생합니다.
이것은 나를 위해 속임수를했다 :
var domain = '{{ DOMAIN }}'; // www.example.com or dev.example.com
var domain_index = window.location.href.indexOf(domain);
var long_app_name = window.location.href.slice(domain_index+domain.length+1);
// this turns http://www.example.com/whatever/whatever to whatever/whatever
app_name = long_app_name.slice(0, long_app_name.indexOf('/'));
//now you are left off with just the first whatever which is usually your app name
그런 다음 jquery를 사용하여 각도도 작동합니다.
$('nav a[href*="' + app_name+'"]').closest('li').addClass('active');
그리고 물론 CSS :
.active{background:red;}
다음과 같이 HTML이 있으면 작동합니다.
<ul><li><a href="/ee">ee</a></li><li><a href="/dd">dd</a></li></ul>
www.somesite.com/ee에서 ee가 '앱'이고 활성화되면 페이지 URL을 사용하여 클래스 활성을 추가하고 배경색을 빨간색으로 채색합니다.
이것은 오랫동안 대답했지만 내 방식을 공유 할 것이라고 생각했습니다.
.run(function($rootScope, $state){
$rootScope.$state = $state;
});
주형:
<ul class="nav navbar-nav">
<li ng-class="{ active: $state.contains('View1') }"><a href="...">View 1</a></li>
<li ng-class="{ active: $state.contains('View2') }"><a href="...">View 2</a></li>
<li ng-class="{ active: $state.contains('View3') }"><a href="...">View 3</a></li>
</ul>
다음을 사용하는 사람들 ui-router
:
<ul class="nav navbar-nav">
<li ui-sref-active="active"><a href="...">View 1</a></li>
<li ui-sref-active="active"><a href="...">View 2</a></li>
<li ui-sref-active="active"><a href="...">View 3</a></li>
</ul>
정확히 일치하려면 (예 : 중첩 된 상태?) $state.name === 'full/path/to/state'
또는ui-sref-active-eq="active"
관심이있는 사람을위한 또 다른 솔루션이 있습니다. 이것의 장점은 의존성이 적다는 것입니다. 웹 서버 없이도 작동합니다. 그래서 그것은 완전히 클라이언트 측입니다.
HTML :
<nav class="navbar navbar-inverse" ng-controller="topNavBarCtrl"">
<div class="container-fluid">
<div class="navbar-header">
<a class="navbar-brand" href="#"><span class="glyphicon glyphicon-home" aria-hidden="true"></span></a>
</div>
<ul class="nav navbar-nav">
<li ng-click="selectTab()" ng-class="getTabClass()"><a href="#">Home</a></li>
<li ng-repeat="tab in tabs" ng-click="selectTab(tab)" ng-class="getTabClass(tab)"><a href="#">{{ tab }}</a></li>
</ul>
</div>
설명:
여기서 지시어를 사용하여 angularjs 모델에서 동적으로 링크를 생성합니다 ng-repeat
. 마술은 방법으로 발생 selectTab()
하고getTabClass()
아래에 제시,이 메뉴 바의 컨트롤러에 정의.
제어 장치:
angular.module("app.NavigationControllersModule", [])
// Constant named 'activeTab' holding the value 'active'. We will use this to set the class name of the <li> element that is selected.
.constant("activeTab", "active")
.controller("topNavBarCtrl", function($scope, activeTab){
// Model used for the ng-repeat directive in the template.
$scope.tabs = ["Page 1", "Page 2", "Page 3"];
var selectedTab = null;
// Sets the selectedTab.
$scope.selectTab = function(newTab){
selectedTab = newTab;
};
// Sets class of the selectedTab to 'active'.
$scope.getTabClass = function(tab){
return selectedTab == tab ? activeTab : "";
};
});
설명:
selectTab()
메소드는 ng-click
지시문을 사용하여 호출됩니다 . 따라서 링크를 클릭하면 변수 selectedTab
가이 링크의 이름으로 설정됩니다. HTML에서이 메소드가 홈 탭에 대한 인수없이 호출되어 페이지가로드 될 때 강조 표시됨을 알 수 있습니다.
이 getTabClass()
메소드는 ng-class
HTML에서 지시문을 통해 호출됩니다 . 이 방법은 탭이있는 selectedTab
변수가 변수 의 값과 같은지 확인 합니다. true 인 경우 "active"를 반환하고 그렇지 않으면 ng-class
지시어에 의해 클래스 이름으로 적용되는 ""를 반환 합니다. 그런 다음 수업에 적용한 CSS active
가 선택한 탭에 적용됩니다.
active
필요한 색상 코드를 사용 하여 필요한 클래스 를 추가해야합니다 .
전의: ng-class="{'active': currentNavSelected}" ng-click="setNav"