2016-04-01 23 views
0

私の角度2アプリには4つのコンポーネントがあります。コンポーネントは、ヘッダー、フッター、ナビゲーションおよびコンテンツです。ヘッダーコンポーネントにボタンがあり、ユーザーがヘッダーコンポーネントからボタンをクリックしたときにナビゲーションコンポーネントのコンテンツを表示/非表示にしたいとします。ヘッダーコンポーネントからナビゲーションコンポーネントにBoolean値を渡す方法をヘッダーからボタンをクリックすると知りたい。すべてのコンポーネントには独自のhtmlテンプレートがあります。ヘッダーからナビゲーションコンポーネントにトグル値を渡す方法が何であるか教えてください。以下に示すようにコンポーネント間の角度2の値渡し

おかげ

+0

あなたのコンポーネント、そのテンプレートを示し、それらがどのように関連しているコードを追加してください。 –

答えて

1

あなたはsharedservicesharedobjectを利用することができます。

working demo

sharedService.ts

export interface ImyInterface { 
    show:boolean; 
} 

@Injectable() 
export class sharedService { 
    showhide:ImyInterface={show:true}; 

    hide(){ 
     this.showhide.show=!this.showhide.show; 
    } 
} 

header.ts(content.ts)

import {Component,Injectable} from 'angular2/core'; 
import {sharedService} from 'src/sharedService'; 

@Component({ 
    selector: 'thecontent', 
    template: ` 
    <div>Header Component <button (click)=showhide()>show/hide</button></div> 
    ` 
}) 
export class TheContent { 
    constructor(private ss: sharedService) { 
    console.log("content started"); 
    } 
    showhide() { 
    this.ss.hide(); 
    } 
} 

navigation.ts(nav.ts)

import {Component,bind} from 'angular2/core'; 
import {sharedService} from 'src/sharedService'; 

@Component({ 
    selector: 'navbar', 
    template: ` 
    <style> 
    .bk{ 
      background-color:black; 
      color:white; 
    } 
    </style> 
    <div>Navigation Component </div> 
    <div [class.bk]="true" *ngIf="showHide.show"> Showing </div> 
    <hr> 
    <hr> 
    ` 
}) 
export class Navbar { 
    showHide:ImyInterface; 
    constructor(ss: sharedService) { 
    this.showHide=ss.showhide; 
    } 
} 
+0

解決に感謝します。あなたが提供したコードを試しました。私はこのエラー '例外を取得しています:TypeError例外:で未定義のプロパティ「ショー」を読み込めません[showHide.showでedockNavigationComponent 3 @:32]' – user3739018

+0

エクスポートクラスナビゲーションバー{showHide 'この行書かれている:IMyInterfaceというの。 ... ... ...} '? 'sharedService'には同じインターフェースがあります。私のデモを正しくチェックしてください。 – micronyks

+0

非常に良い。私は 'showhide()'の 'show'プロパティを直接変更するのではなく、APIの' hide() 'を使うのが好きです。私はインターフェイスの使い方が好きだと思う。これは、サービスで別のAPIを使用して値を取得するよりも効率的です。しかし、APIを使用して 'show'の現在の値を取得した場合(例:' * ngIf = "ss.getShowValue()')、ブール値をオブジェクトにラップする必要はありません。ていないことを確認これは、私が良く...効率以上のカプセル化を好む。あなたの考え? –

関連する問題