2017-02-24 12 views
1

を私は子コンポーネント内の次の関数を持っている:は、親コンポーネントのボタンのクリック時に子コンポーネントから機能を実行します。Angular2

reload() { 
    clearInterval(this.points); 
    this.initiateInterval(); 
    this.redrawImages(); 
} 

それはwindow.resizeイベントでいくつかの画像を再描画です。

親コンポーネントには、ウィンドウを縮小するボタンmenu-burgerがあります。このボタンにバインドするには、子コンポーネントのreload()関数を使用します。

この

は親コンポーネントからの私のボタンです:

<button class="collapseMenuIcon" (click)="toggleMenu()">

私はスタック上のそれについての他の質問を探していましたが、私の場合には - このreload関数は、この子コンポーネントに多くのものを使用しています。

また、Angular2が頻繁に変更されるため、他の質問からの解決策はほとんど使用されなくなりました。

ありがとうございます。私はすべての回答をupvoteします。

答えて

2

共有サービスは非常に良いオプションです。別のオプションをそこに投げるだけで、ユースケースに応じて、必要に応じて、サービスなしで親と子の間にSubjectを使用することができます。子供で

宣言件名:に子供に教え、

import { MyChildComponent } from './my-path'; 

と、ボタンのクリックで:

constructor(....) { 
    MyChildComponent.fireEvent.subscribe(res => { 
     this.reload(); 
    }); 
} 

そして、あなたの親に:

import { Subject } from 'rxjs/Subject'; 

public static fireEvent: Subject<boolean> = new Subject(); 

とあなたのコンストラクタで購読火災reload-方法:

toggleMenu() { 
    MyChildComponent.fireEvent.next(true); 
} 
0

コンポーネント間で通信する方法はいくつかあります。私は個人的にその目的のためにサービスを利用しています。

ここで読む:https://angular.io/docs/ts/latest/cookbook/component-communication.html

最後の例(サービス1)は、私が使用するものであり、実装が非常に簡単です。

編集:

サービスを使用するには、アプリケーションの他の部分でそれらを使用することができるという、あなたは独立したコンポーネントを持つことができます。あなたはまた、データを送受信することができ、通信は双方向です。この方法を強くお勧めします。

関連する問題