itsource

Angular JS를 사용하여 부트스트랩 네비게이션바의 액티브클래스를 설정하려면 어떻게 해야 하나요?

mycopycode 2022. 12. 4. 22:36
반응형

Angular JS를 사용하여 부트스트랩 네비게이션바의 액티브클래스를 설정하려면 어떻게 해야 하나요?

아이템이 있는 부트스트랩에 네비게이션바가 있는 경우

Home | About | Contact

각 메뉴 항목이 활성화되어 있을 때 해당 항목의 활성 클래스를 설정하려면 어떻게 해야 합니까? 「 」, 「 」를 설정하려면 해야 합니다.class="active"가 「」에 있는 .

  1. #/
  2. #/about
  3. #/contact

매우 우아한 방법은 ng-controller를 사용하여 ng 뷰 밖에서 단일 컨트롤러를 실행하는 것입니다.

<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.controllers에 포함:

function HeaderController($scope, $location) 
{ 
    $scope.isActive = function (viewLocation) { 
        return viewLocation === $location.path();
    };
}

방금 했으니까, .bs-active-link<ul>하는 링크를 "Link를 추가합니다.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>

Javascript:

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');   
                };
            });     
        });
    }
}
}]);

Angular Strap을 참조할 수 있습니다.네바 디렉티브는 원하는 것 같습니다.

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

        });
      });
    }
  };
});

이 지시어를 사용하려면:

  1. http://mgcrea.github.io/angular-strap/에서 Angular Strap 다운로드

  2. 부트스트랩.
    <script src="lib/angular-strap.js"></script>

  3. 이치노
    angular.module('myApp', ['$strap.directives'])

  4. 이치노
    <div class="navbar" bs-navbar>

  5. 항목에 을 추가합니다.
    <li data-match-route="/about"><a href="#/about">About</a></li>

여기 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>

각도 내JS 컨트롤러:

$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>

무엇보다도, 이 문제는 여러 가지 방법으로 해결될 수 있다.이 방법은 가장 우아하지는 않지만, 확실히 효과가 있습니다.

다음은 프로젝트에 추가할 수 있는 간단한 솔루션입니다.키오프에 사용할 수 있는 경로를 구성할 때 "pageKey" 또는 기타 속성을 추가할 수 있습니다.또한 $route 객체의 $routeChangeSuccess 메서드에 리스너를 구현하여 루트 변경이 정상적으로 완료될 때까지 리슨할 수 있습니다.

핸들러가 기동하면, 페이지 키를 취득해, 그 키를 사용해 이 페이지에 대해서 「ACTIVE」할 필요가 있는 요소를 특정해, ACTIVE 클래스를 적용합니다.

모든 요소를 만들 수 있는 방법이 필요합니다.액티브.보시다시피 네비게이션 항목의 .pageKey 클래스를 사용하여 모든 항목을 끄고 .pageKey_{를 사용하고 있습니다.PAGEKEY}를 클릭하여 개별적으로 활성화합니다.모든 항목을 비활성화하는 것은 단순한 접근법으로 간주됩니다.이전 경로를 사용하여 활성 항목만 비활성화하는 것으로 성능이 향상되거나, 비활성화할 활성 항목만 선택하도록 jquery selector를 변경할 수 있습니다.jquery를 사용하여 모든 활성 항목을 선택하는 것이 아마도 가장 좋은 해결책일 것입니다.이는 이전 루트에 존재할 가능성이 있는 cSS 버그가 발생했을 때 현재 루트의 모든 것이 확실하게 정리되기 때문입니다.

즉, 이 코드 행을 변경해야 합니다.

$(".pagekey").toggleClass("active", false);

이것에게

$(".active").toggleClass("active", false);

다음은 샘플 코드입니다.

부트스트랩 네비게이션바 지정

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

'각의유틸'을 실제로 사용할 수 있습니다.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>

이를 달성하기 위해 $location과 함께 ng-class 디렉티브를 사용합니다.

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

다음과 같은 $location 서비스에 액세스할 수 있는 메인 컨트롤러 내부에 네비게이션 바가 있어야 합니다.

bajasApp.controller('MenuCntl', ['$scope','$route', '$routeParams', '$location', 
   function MenuCntl($scope, $route, $routeParams, $location) {
   $scope.$route = $route;
   $scope.$location = $location;
   $scope.$routeParams = $routeParams;
}]);

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>

자세한 내용은 문서를 참조하십시오.

이는 다음과 같은 각도 표현식의 조건을 사용하여 달성할 수 있습니다.

<a href="#" class="{{ condition ? 'active' : '' }}">link</a>

이 미니 로직의 많은 아웃소싱이 코드 베이스를 다소 오염시킬 수 있다고 해도, 보다 「적절한」방법이 되는 각도 지시가 있는 것은 사실입니다.

GUI 스타일링은 디렉티브 작성보다 조금 빠르기 때문에 가끔 조건부로 사용합니다.하지만 그들이 실제로 오랫동안 코드 베이스에 남아 있었던 사례는 말할 수 없습니다.결국 나는 그것을 지시로 바꾸거나 문제를 해결할 더 나은 방법을 찾는다.

Angular Strap을 사용하지 않는 것이 좋다면 이 지시문이 도움이 될 것입니다.이것은, 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사용하고 있는 것을 전제로 하고 있습니다.

제 생각은 이렇습니다.이 게시물에서 찾은 답변의 조합입니다.조금 다른 케이스가 있었기 때문에 이 솔루션은 메뉴를 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;

        }
    }
 }
});

디렉티브 템플릿(templates/menu.html)

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

지령을 포함하는 HTML

<comp-navbar/>

도움이 되었으면 좋겠다

대답하자면, 이런 구조를 다루려면 이게 필요했어요.

- 인덱스

<- <-active
---event-list
---event-edit
map---event-map <-map

- - 소소
---place-list
(편집)
---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>

이치노
이것은, 다음의 조작으로 간단하게 인라인을 실시할 수 있습니다.

<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로 평가되므로 해당 속성에 종속된 요소에는 활성 클래스가 할당되지 않습니다.

@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의 답변을 기반으로 Fielin 업데이트 - http://jsfiddle.net/abhatia/en4qxw6g/

하기 위해 세 . 1단계는 3단계입니다.
리스트를가질 a" 대해 값 dd(했습니다.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;}

싱글 레벨의 드롭 다운 메뉴를 실장하고 싶은 유저에게 있어서 도움이 될 것입니다.

이 active-link 디렉티브는 https://stackoverflow.com/a/23138152/1387163에서도 사용할 수 있습니다.

위치가 /url과 일치하면 부모 li가 활성 클래스를 가져옵니다.

<li>
    <a href="#!/url" active-link active-link-parent>
</li>

링크에 지시어를 사용할 것을 권장합니다.여기 바이올린이 있습니다.

하지만 아직 완벽하지는 않다.해시방에 주의하세요;)

다음은 디렉티브용 Javascript입니다.

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

토론에서 제 의견을 덧붙이자면 순수 각도 모듈(jquery 없음)을 만들었습니다.데이터를 포함한 해시 URL에서도 동작합니다(예: #/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);
            }
        }
    }]);
}());

* (물론 지시 부분만 사용 가능)

** 빈 해시(예: 빈 해시)에는 이 기능이 작동하지 않습니다. example.com/# 그냥 '그냥'일 수도 있어요.example.com ), 어, 어, 어, 어, 적, 적, )를 포함해야 합니다.example.com/#/ 그냥 '그냥'일 수도 있어요.example.com#/ngResource를 사용합니다.

  • 다음은 바이올린입니다.http://jsfiddle.net/gy2an/8/
  • 다음은 github입니다.https://github.com/Karl-Gustav/autoActive
  • 저의 원래 답변은 다음과 같습니다.https://stackoverflow.com/a/22282124/1465640

이게 날 속였어

  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(angular와 함께 작업)를 사용하여 활성 클래스를 추가합니다.

$('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의 가 '앱'이고 활성화 되어 있는 경우 페이지 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-repeatselectTab() ★★★★★★★★★★★★★★★★★」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() 방법은 서서는 method method method method is is is is method method method method method 라고 합니다.ng-class이 한지 여부를 합니다.selectedTab 를 반환하고 않으면 true에 의해 클래스 이름으로 되는 "active"를 반환합니다.ng-class그럼 클래스 css에 이든 간에active선택한 탭에 적용됩니다.

필요한 것을 됩니다.active- code - class (필요한 색상 코드 포함)

::ng-class="{'active': currentNavSelected}" ng-click="setNav"

언급URL : https://stackoverflow.com/questions/16199418/how-to-set-bootstrap-navbar-active-class-with-angular-js

반응형