2017-02-28 20 views
1

私はポップアップコンポーネントを設計しました。それは、以下のメソッドをbackのフロント変数にバインドされている変数を設定して表示し、非表示にすることを意図しています。Angular 2のコンポーネントは、そのメソッドを呼び出すことによって、別のコンポーネントをどのようにポップアップさせることができますか?

hide() { 
    this.back = this.back.replace(/[ ]?shown/, ""); 
    this.front = this.front.replace(/[ ]?shown/, ""); 
} 

show() { 
    this.back += "shown"; 
    this.front += "shown"; 
} 

問題は、他のコンポーネントからポップアップを呼び出すことができないようにすることです。実際、私が目指しているアプリケーションのマークアップは次のとおりです。

<navbar></navbar> 
<sidebar></sidebar> 
<filter></filter> 
<poppy></poppy> 

私はそれを呼び出す方法がわかりません。私は、ナビゲーションバーのクリックに反応して、リクエストがポップアップを引き起こすようになっていることを検知しています。

if(notImplementedYet) { 
    ??? 
} 

私はその問題を尋ねましたが、私は本当にそれにアプローチする適切な方法の明確なイメージを得ていません。たとえば、私はInputOutputhereについて見てきましたが、私の必要性に遠隔から適用できるかどうかは判断できません。

私はまたthisを見ましたが、Angularの経験が不足している可能性がありますので、教えてくれません。また、私は親から子へ/親から子へのアプローチが非常に厄介な呼び出し構造になることを心配しています。

+0

それは、コンポーネント間通信のためのサービスを使用するのが一般的です。 [実装例](http://stackoverflow.com/a/4204194)を参照してください。アプリ内のどのコンポーネントがサービスを介してSpinnerComponentを表示/トリガーできるかを示します。私はあなたの状況にそれを適応させることができると思います。また、[その他の技術](https://angular.io/docs/ts/latest/cookbook/component-communication.html)の公式ドキュメントのコンポーネント通信についてもチェックしてください。 – AngularChef

答えて

1

ポップアップを呼び出すコンポーネントで@Outputを使用できます。テンプレート変数を使用するだけで、ポップアップコンポーネントのshowメソッドまたはhideメソッドを呼び出すことができます。例えば

コードによってナビゲーションバーにクリックしたとき、あなたはあなたのポップアップを表示することができます。

import { Component, Output, EventEmitter } from '@angular/core'; 
@Component({ 
    selector: 'navbar', 
    templateUrl: './nav-bar.component.html' 
}) 
export class NavComponent { 
    @Output() onClickNav: EventEmitter<any> = new EventEmitter(); 
    onClick():void { 
     this.onClickNav.emit(null); 
    } 
} 

<navbar (onClickNav)="popup.show()"></navbar> 
<poppy #popup ></poppy> 
+0

この記事の回答を確認してください http://stackoverflow.com/questions/42460418/angular-2-ng2-bootstrap-parent-component-call-modal-show-in-child-component-n/42463516#42463516 – Aravind

+0

それは仕事をするようです。明瞭にするため+1。今、私はこのように* null *の代わりにオブジェクトを送信しようとしました: 'this.onClickNav.emit({donkey:" ass "})'。しかし、呼び出すときに 'popup.show(???)'部分に接続する方法がわかりません。提案? –

0

ViewChildをお探しの場合があります。

基本的には、子コンポーネントを参照する変数ViewChildをインスタンス化し、そのメソッドを呼び出すことができます。

+0

子供/両親の間のパスが長い場合、どのように機能しますか?私はメンテナンスの問題を参照してください...提案? –

関連する問題