2017-02-13 13 views
2

まずはお時間をいただきありがとうございます。角2、親から子へのコミュニケーション

私は角2を初めて使いました。この問題を解決する方法を理解しようとしています。

コンポーネント構造:

<parent-component> 
    <dynamic-button></dynamic-button> 
    <dynamic-button></dynamic-button> 
    ... 
</parent-component> 

子コンポーネント

export class DynamicButtonComponent { 
    @Output() clicked: EventEmitter<any> = new EventEmitter<any>(); 

    loading: Boolean = false; 
    handleClick(event: any) { 
    this.loading = true; 
    this.clicked.emit(event); 
    } 
}; 

私は親にイベントを送信していますダイナミックボタンをクリックします。 'loading'変数を使用して、ボタンの横にスピナーが表示されます。 ParentがAPI呼び出しを行うと、APIコールが終了したときに、親コンポーネント(最初はイベントを送信する)から子コンポーネントに戻り、スピンナの表示を停止します。

この問題を解決するには、どのような方法が最善の方法であろうと助言してください。イベントエミッタへのコールバックがあると思ったが、これはAngular 2の原則に反していることをStackOverflowで読み取った。

+0

何あなたのAPIの中で更新される親のオブジェクトにバインド@Inputプロパティについて折り返し電話? https://angular.io/docs/ts/latest/cookbook/component-communication.html#!#parent-to-child – elvin

+0

通常、コンポーネント間で状態を共有するサービスを使用します。説明したようなスピナーサービスを実装するためのコードの概要は次のとおりです。http://stackoverflow.com/a/42041945 – AngularChef

+0

@AngularFranceまずはお返事ありがとうございます。私のシナリオでは、すべてのボタンがスピナーコンポーネントを持つことができます。それらはすべて同じサービスに加入していますか? –

答えて

4

OnChangesライフサイクルフックを使用して、進行中の子コンポーネントの@Inputアップデートをキャッチすることができます。

親:

export class ParentComponent { 
    finishedLoading: boolean = false; 
    doApiWork(){ 
     ... 
     finishedLoading = true; 
    } 
} 

が子供:

export class DynamicButtonComponent implements OnChanges{ 
    @Input() loadingDone = false; 

    ngOnChanges(){ 
     if(loadingDone){ 
      //Execute 
     } 
    } 
} 

ビューでバインド:

<parent-component> 
    <dynamic-button [loadingDone]="finishedLoading"></dynamic-button> 
    ... 
</parent-component> 
+0

これは当初私のアイデアでしたが、私がそのアプローチに持っている質問のカップル 1.入力loadDoneは、それが本当に更新されたときにすべてのDynamicButtonコンポーネントに送信されます、どのように関連するコンポーネントに送信するのですか?関係のないものには無視させるようにします。 2.すべてのDynamicButtonコンポーネントの再レンダリングをトリガーせずにfinishedLoadingをfalseに戻すにはどうすればいいですか? –

+0

@BobinVarghese DynamicButtonコンポーネントの静的な数がある場合は、各コンポーネントの状態を保持するビット配列を使用できます。 * ngForを使用してプログラムで生成された場合は、ループのインデックスを使用してロジックを決定できます。 – chrispy

関連する問題