2016-02-16 7 views
47

どのように角度2のブートストラップナビバー「アクティブ」クラスを設定できますか?私はAngular 1 wayしか見つけませんでした。Bootstrap navbarの "active"クラスを角2で設定するには?

私は約ページに行き、について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> 

おかげ

+1

は、私は** routerLinkが自動的に**ルータリンクアクティブにクラスを設定することを信じていますそのリンクがアクティブなとき。 あなたのプロジェクトで可能ならば、あなたのCSSで.router-link-activeクラスを使用します。 – Gabu

答えて

110

を追跡しました。 (https://github.com/angular/vladivostokrouterLinkActiveディレクティブを使用できます。それ以上のjavascriptは必要ありません。

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

は、私が使用した "角度/ルータ@": "^ 3.0.0-alpha.7" 次の簡単なコードが動作するAngular2 RC4の最新版について

+0

ダーツには対応していますか? –

+0

はまだ '="アクティブ "'(間違っている)と '=" ['アクティブ'] ''(右)の間で混乱しています。ありがとう – superjos

+1

おそらく現在のルートが実際にアクティブな状態にある場合、複数のクラス/値を追加できるようにするために、おそらく@superjos –

6

RouterクラスからgenerateisRouteActiveを使用してください。ドキュメントによれば

を生成する(linkParamsは:任意[]):命令

が提供ルートリンクDSLに基づいて命令を生成します。

isRouteActive(命令:命令):

ブールは、命令を指示は、そうでない場合はfalse、現在アクティブ である場合に真を返します。私のために動作しませんでしたRC2で

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

angular2 rc1では、これは次のように変更する必要があります: '[class.active] =" router.urlTree.contains(router.createUrlTree(['Home'])) "'また、私はルータが次のようにコンポーネントに注入されなければならないことを指摘したいと思います: 'コンストラクタ(public router:Router)' –

+0

ルートパス '/'を調べるために、 'router.urlTree._root.children .length == 0'です。見た目はいいけど、うまくいく。 –

+0

ちょうどここに注意してください:あなたのコンストラクタがコンストラクタ(プライベートルータ:ルータ)のように見える場合、上記はすべて動作しますが、ルータはプライベートアクセスを持っているので、生産用に構築することはできません。 –

1

。私は

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

を使用して終了し、新しい3.0.0を使用する場合は、コードに後ろのそれを

currentChoice: string = "home"; 

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

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

    } 
34

バートDeterdの答えが正しいんが、追加することができる一つのことがあります。

つのルートが別のルートのサブである場合、あなたはこのような何かが起こる表示されます。2 active anchors

あなたはそれが唯一の正確なルートを一致させるために、これを追加することができます。

[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> 
+0

私はこのホームルートがアプリドメイン(空の文字列)になっていました。それは常に活発に見えました。 – Vic

+0

私は問題に遭遇しました。リンクの外側をクリックすると(例えばウェブの中央に)、liは非アクティブになりました。これは、タグの代わりにアンカータグにアンギュラディレクティブがあるためです。私の頭の中でこれは違いはありませんが、それはあなたの方法で動作し、このコメントは誰かに役立ちます。ありがとう! – Mese

0

バージョン: "^ 3.3.1"

私は単に私が

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

私app.route.tsに宣言し、ビューで、私はちょうどで

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

ルートの名前を書くことを、ルートの名前を入れて「角度/ルータ@」:「^ 3.3.1」、以前のバージョンの違いは、最終的なリリースではrouterLinkActive

[routerLinkActive]="['active']" 

でブラケットがあり、NG2はちょうどremovので、文句を言うだろうそれはあなたが探しているまさにではありませんが、電子ブラケット

routerLinkActive="active" 
0

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

0
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]; 
+0

いくつかの説明を追加してください。 – Sunil

関連する問題