Program Club

Angular 2에서 Bootstrap navbar "활성"클래스를 설정하는 방법은 무엇입니까?

proclub 2020. 11. 25. 21:26
반응형

Angular 2에서 Bootstrap navbar "활성"클래스를 설정하는 방법은 무엇입니까?


Angular 2에서 Bootstrap navbar "active"클래스를 어떻게 설정할 수 있습니까? Angular 1 way 만 찾았 습니다 .

내가 갈 때 정보 페이지를 추가 class="active"소개 하고 제거 class="active" .

<ul class="nav navbar-nav">
    <li class="active"><a [routerLink]="['Home']">Home</a></li>
    <li><a [routerLink]="['About']">About</a></li></li>
</ul>

감사


새로운 3.0.0을 사용하는 경우. 구성 요소 라우터 ( https://github.com/angular/vladivostok )는 routerLinkActive 지시문을 사용할 수 있습니다 . 더 이상 자바 스크립트가 필요하지 않습니다.

<ul class="nav navbar-nav">
  <li [routerLinkActive]="['active']"> <a [routerLink]="['one']">One</a></li>
  <li [routerLinkActive]="['active']"> <a [routerLink]="['second']">Second</a></li>
</ul>

"@ angular / router"를 사용했습니다 : "^ 3.0.0-alpha.7"


Bert Deterd의 대답은 정확하지만 추가 할 수있는 것이 하나 있습니다.

한 경로가 다른 경로의 하위 문자열 인 경우 다음과 같은 상황이 발생합니다. 2 개의 활성 앵커

정확한 경로와 만 일치하도록 추가 할 수 있습니다.

[routerLinkActiveOptions]="{exact:true}"

전체 예 :

<ul class="nav navbar-nav">
  <li [routerLinkActive]="['active']" [routerLinkActiveOptions]="{exact:true}">
    <a [routerLink]="['/']">Home</a>
  </li>
  <li [routerLinkActive]="['active']" [routerLinkActiveOptions]="{exact:true}">
    <a [routerLink]="['/about']">About</a>
  </li>
  <li [routerLinkActive]="['active']" [routerLinkActiveOptions]="{exact:true}">
    <a [routerLink]="['/calendar']">Calendar</a>
  </li>
</ul>

Angular2 RC4 최신 버전의 경우 다음과 같은 간단한 코드가 작동합니다.

      <li [class.active]="router.url==='/about'"><a [routerLink]="['/about']">About</a></li>

"@ angular / router"에서 가져 오기 {Router} 사용 생성자에 라우터를 넣습니다.


Router 클래스 isRouteActivewith generate사용하십시오 .

문서에 따르면 :

generate (linkParams : any []) : 명령어

제공된 Route Link DSL을 기반으로 명령어를 생성합니다.

isRouteActive (instruction : Instruction) : 부울

명령이 주어지면 명령이 현재 활성 상태이면 true를 반환하고 그렇지 않으면 false를 반환합니다.

<li [class.active]="router.isRouteActive(router.generate(['/Home']))">
   <a [routerLink]="['/Home']">Home</a>
</li>

이것은 트릭을 수행합니다 (RC5 사용)

<li [class.active]="homeLink.classList.contains('active')">
    <a #homeLink routerLink="/home" routerLinkActive="active">Home</a>
</li>

나를 위해 작동하지 않은 RC2에서. 나는 결국 사용했다

   <li  (click)="setActive('home')" class="{{getActive('home')}}"> <a [routerLink]="['/FullScreen']">Home</a></li>

그리고 그 뒤에있는 코드에서

    currentChoice: string = "home";

   setActive(choice: string): void{
       this.currentChoice = choice;
   }

   getActive(choice: string) : string{
       if(this.currentChoice == choice)
            return "active";
       else
            return "not";

   }

"@ angular / router": "^ 3.3.1"에서 이전 버전과의 차이점은 routerLinkActive의 브래킷입니다.

[routerLinkActive]="['active']"

최종 릴리스에서 ng2는 불만을 표시하므로 브래킷을 제거하십시오.

routerLinkActive="active"

버전 "@ angular / router": "^ 3.3.1"

app.route.ts에서 선언 한 경로의 이름을 간단히 입력합니다.

import { ModuleWithProviders } from '@angular/core';
import { Routes, RouterModule }   from '@angular/router';

import { HomeComponent } from './home/home.component';
import { DeclarationsComponent } from './declarations/declarations.component';

const appRoutes: Routes = [
    { path: '', pathMatch: 'full', component: HomeComponent },
    { path: 'declarations', pathMatch: 'full', component: DeclarationsComponent }
];

export const routing: ModuleWithProviders = RouterModule.forRoot(appRoutes);

그리고보기에서는 경로의 이름을 씁니다.

  <ul class="nav navbar-nav">
     <li routerLinkActive="active"><a routerLink="">Home</a></li>
     <li><a routerLink="declarations">SAV</a></li>
  </ul>

<a routerLink="/user/bob" routerLinkActive="active-link" [routerLinkActiveOptions]="{exact:
true}">Bob</a>


import { Directive, HostListener, ElementRef, HostBinding, Renderer2 } from '@angular/core';

@Directive({
  selector: '[appNavDropdown]'
})
export class NavDropdownDirective {
  isOpen:boolean =false;
  counter:number = 0;
  constructor(private el: ElementRef, private render: Renderer2) { }

  @HostBinding('class.open') get opened() {
    return this.isOpen;
  }

  @HostListener('click') onmouseClick()
  {
    this.counter++
    console.log();
    if(this.counter % 2 == 1)//odd
    {
      let part = this.render.parentNode(this.el.nativeElement);
      this.render.addClass(part,'open');
      this.isOpen = true;
    }else{
      let part = this.render.parentNode(this.el.nativeElement);
      this.render.removeClass(part,'open');
      this.isOpen = false;
    }
  }
  // @HostListener('mouseleave') onmouseLeave()
  // {
  //   let part = this.render.parentNode(this.el.nativeElement);
  //   this.render.removeClass(part,'open');
  //   this.isOpen = false;
  // }

  toggleClose() {
    // let part = this.render.parentNode(this.el.nativeElement)
    //this.menuclick = false;

  }
  toggle() {
    this.el.nativeElement.classList.toggle('open');
  }
}

/**
* Allows the dropdown to be toggled via click.
*/
@Directive({
  selector: '[appNavDropdownToggle]'
})
export class NavDropdownToggleDirective {
  constructor(private dropdown: NavDropdownDirective) { }

  @HostListener('click', ['$event'])
  toggleOpen($event: any) {
    console.log($event)
    $event.preventDefault();
  //  this.dropdown.toggleClose()
   this.dropdown.toggle();
  }
}

export const NAV_DROPDOWN_DIRECTIVES = [NavDropdownDirective, NavDropdownToggleDirective];

여러 링크의 경우 이것을 시도하십시오

<ul class="navbar-nav ml-auto"> 
<li class="nav-item " routerLink="" routerLinkActive="active" [routerLinkActiveOptions]="{exact:true}">
<a class="nav-link" routerLink="">Home </a></li>
<li class="nav-item" [routerLinkActive]="['active']">
<a class="nav-link" routerLink="/aboutus">About</a></li>
<li class="nav-item" [routerLinkActive]="['active']">
<a class="nav-link" routerLink="/gallery">Gallery</a>
 </li>
<li class="nav-item" [routerLinkActive]="['active']">
<a class="nav-link" routerLink="/contactus">Contact Us</a>
</li>
</ul>

참고 URL : https://stackoverflow.com/questions/35422526/how-to-set-bootstrap-navbar-active-class-in-angular-2

반응형