2017-10-19 24 views
1

main app.componentとheader.componentの2つのコンポーネントがあります。これで、クラスをメインにアクティブにするためのボタンをヘッダに挿入しますapp.componentアイブ氏はapp.componentで働いボタンを得たが、私は、ヘッダー・コンポーネントにボタンを移動したいが、同じ機能を持つClickイベントをAngular 2の別のコンポーネントにターゲティングするにはどうすればいいですか?

HTML

<div> 
    <button type="button" id="sidebarCollapse" class="btn btn-primary" 
(click)="togglesideBar(); toggleSign();"> 
     <i class="glyphicon glyphicon-{{sign}}"></i> 
    </button> 
</div> 
<!--Chat Side Bar--> 
    <div id="chatsidebar" [ngClass]="{'active': isSideBarActive}"> 
     <app-chatsidebar></app-chatsidebar> 
    </div> 
</div> 

sign = 'chevron-right'; 

toggleSign() { 
    if (this.sign === 'chevron-right') { 
     this.sign = 'chevron-left'; 
    } else { 
     this.sign = 'chevron-right'; 
    } 
} 

togglesideBar() { 
    this.isSideBarActive = !this.isSideBarActive; 
} 
をAPP.COMPONENT.TS

同じ機能をheader.component.tsに入れて、同じボタンをheader.component.htmlに入れてみましたが、うまくいきませんでした。

助けてください!あなたのヘッダー・コンポーネントで構成see the angular docs

間の通信にイベントを使用することができます

+0

に注入します共通のサービスを使用することができます。アプリケーションの複雑さにもよりますが、この問題のより複雑な解決策であるngRxをチェックアウトすることができますが、他の多くの問題も解決します。 https://www.youtube.com/watch?v=cyaAhXHhxgk –

答えて

2

あなたがクラスに

@Output() sidebarToggled = new EventEmitter<boolean>(); 

を持つEventEmitterプロパティを追加することができます おかげで、あなたのメインのアプリケーションコンポーネント

のイベントにバインド
<app-header (sidebarToggled)="onSidebarToggled($event)"></app-header> 

とapp.component.ts

onSidebarToggled(toggled: boolean) { 
    ... 
} 

これはあなたの状況に動作しない場合は、以下にデビンの答えはこれを行うための一つの方法である、両方のコンポーネント

+0

ごめんなさい、すばやい質問今どこに私の機能を置くのですか? – g14nt

+0

onSidebarToggled関数は、アプリケーションコンポーネントクラスにある必要があります。これは、ヘッダーコンポーネントから変更されたときにsidebarToggledの値が渡されます。 onSidebarToggled関数内でisSidebarActiveプロパティを切り替えることができます –

+0

これは、(click)= "toggleSidebar();ではなく、私は(クリック)= "sidebarToggled();を使用します??再びありがとう – g14nt

関連する問題