2016-06-14 7 views
1

私は2つのボタンを備えたナビゲーションバーを持っています。他のページのボタンだけを表示し、現在のページのボタンを無効にします。角2 * ngモデルチェンジ時の再評価がありません

設定ページを開くと、設定ボタンが非表示になります。プロファイルボタンをクリックすると無効にならず、設定ボタンが表示されません。

export class SettingsComponent implements OnInit { 
 
    isSettingsProfile = false; 
 
    isSettingsHome = false; 
 
    
 
    ngOnInit() { 
 
     this.isSettingsHome = true; 
 
     this.isSettingsProfile = false; 
 
    } 
 
    
 
    OnNavBarClick(button: string) { 
 
     if (button = "settings") { 
 
      console.log ('setting home true/ profile false') 
 
      this.isSettingsHome = true; 
 
      this.isSettingsProfile = false; 
 
     } 
 
     else if (button = "profiles") { 
 
      console.log ('setting home false/ profile true') 
 
      this.isSettingsProfile = true; 
 
      this.isSettingsHome = false; 
 
     } 
 
     
 
    }

そして、ナビゲーションバーのHTML::

ここでコンポーネントクラスのコードです

 <ul class="nav navbar-nav navbar-right"> 
 
      <li> <a [routerLink]="['/home']" href="#">Home</a></li> 
 
      <li *ngIf="!isSettingsHome" class="active"><a [routerLink]="['/settings']" href="#" (click)="OnNavBarClick('settings')">Settings</a></li> 
 
      <li *ngIf="!isSettingsProfile"><a [routerLink]="['/settings/profile']" href="#" (click)="OnNavBarClick('profile')">Profile</a></li> 
 
     </ul>

任意の提案ですか?

+0

@GünterZöchbauerが正しいです、あなたは余分な引用符を持っています。しかし、コードを渡したときにそれが単なる型だった場合、別の解決策があるかもしれません。 'return this.isSettingsHome;' – Jwags

+2

'if(button =" settings ")'は 'if(button ===" settings ")にする必要があります、あなたのAngularJSクラスの関数を呼び出すことができます。 '。 –

答えて

0

あなたは<li *ngIf="!isSettingsHome"" class

+0

それは私の部分でタイプミスだった、私のコードはそれを持っていません。申し訳ありません.. –

+0

ルータがクリック時にコンポーネントを破壊し、クリックハンドラが更新する機会を得られない、または更新する可能性がありますが、戻るときにコンポーネントが再作成される可能性があります。あなたが提供したコードから見えにくい。再現可能なプランカを作成してください。 –

0

の終わりに

detectChanges()

を呼び出す

import { ChangeDetectorRef } from '@angular/core'; 

に変更する必要がありましたここで何が起こっているのかわからないし、ルータの構造についてもっと知らなくてはいけませんが、ナビゲーションがコンポーネントのリロードを引き起こしている可能性が高いと思いますこれによりコンポーネントが初期状態に戻ります。その後、簡単なCSSを定義

<li><a [routerLink]="['/settings']" routerLinkActive="hide-link">Settings</a></li> 

まずルーターのリンクにrouterLinkActiveディレクティブを追加し、「リンクを非表示」(またはお好みの任意の名前)するクラスを設定し

:私は、次の再構築をお勧めしますクラスをリンクを非表示にする

.hide-link { display: none; } 
関連する問題