2016-12-07 3 views
3

ルートコンポーネントテンプレートにコンポーネントを追加し、子コンポーネントからコンポーネントにアクセスできるかどうかを指定します。例えば、これは、ルートアプリケーション・コンポーネントであると想像:私が望む何angular2のグローバルコンポーネント

<main> 
    <global-component #globalComponent></global-component> 
    <child-component></child-component> 
</main> 

はこのような何かを行うことができるという、「子部品」のコードでは、次のとおりです。

@Component({...}) 
export class ChildComponent 
{ 
    @SomethingAwesome(GlobalComponent) globalComponent: GlobalComponent; 
} 

目標は常に同じ方法でエラー/警告を表示できることです。 "GlobalComponent"テンプレートはモーダルメッセージであり、私はいつでもそれを表示できるようにしたいと考えています。たとえば、次のように

... 
this.globalComponent.ShowError("Something's weird in here !"); 
... 

代替(私は推測)私が考えている「GlobalComponentは」に加入し、それに応じて反応するであろうことを、観察してサービスを作成しているが、私は尋ねたことは可能である場合、私は思ったんだけど。

編集:例では

、コンポーネントが兄弟であるが、それは常にそうではないかもしれません。 "GlobalComponent"は、どんな "深み"があっても、どのコンポーネントでも利用できるはずです。

おかげ

答えて

4

彼らは兄弟である場合は、あなただけの彼らは私の例では兄弟であるが、目標は「globalComponentにアクセスできるようにすることです

<main> 
    <global-component #globalComponent></global-component> 
    <child-component [global]="globalComponent"></child-component> 
</main> 
@Component({...}) 
export class ChildComponent 
{ 
    @Input() global: GlobalComponent; 

    ngOnInit() { 
     console.log(this.global); 
    } 
} 
+0

でそれを渡すことができますどのコンポーネントからでも使用できます。兄弟であるかどうか。申し訳ありませんが明らかでない場合。 – ssougnez

+2

次に、共有サービスが必要です。 GlobalComponentは共有サービスを注入してサービスに登録することができ、同じサービスにアクセスする他のコンポーネントはそこで 'GlobalComponent'にアクセスできます。より良いオプションは、共有サービスに 'Observable'を持ち、それを使ってコンポーネント間の通信を行います。 1つは加入者であり、もう1つはエミッタです。 –

+0

https://angular.io/docs/ts/latest/cookbook/component-communication.html#!#bidirectional-service –