2015-10-15 11 views
8

多分、これは2つの質問の1つです。私は、あなたがAngular 2のComponentの中で使用される指示子を明示的に宣言しなければならないことを知っています。これはComponentのComponentに伝播しますか?そうでなければ、第2に、コンポーネントで宣言された変数は、子に伝播するか、コンポーネントに明示的に渡す必要がありますか?ディレクティブ/スコープの継承

+1

あなたの言いたいことを実行する予定です。 [この問題を見る](https://github.com/angular/angular/issues/2844)。しかし、それは押し戻され続けるので、あなたは待たなければなりません。 –

+0

モジュール化のアイデアは、コンポーネント/モジュールが暗黙的な依存関係を持たないことを指示するため、これはひどく厄介なものだと思います。もしあなたが他の場所にあなたの子コンポーネントを移動させるならば、それは壊れます。これは、通常、継承または依存性注入によって解決されます。これは、子コンポーネントと親コンポーネントの間に強い結びつきを作り、子コンポーネントがそれ自身で移動することを不可能にします。 – jornare

+0

関数型プログラミングと同じように意味があると思います...残念ながら、私はいくつかの作業があることを意味します;) – djvs

答えて

2

ベータ版14では、使用されているすべての指令を@Componentdirectives配列に明示的にリストする必要があります。 2番目の質問では、コンポーネントで宣言された変数(例:this.name)は子コンポーネントに伝播されません。そのためには、<child [item]="parentItem"></child>などの属性を使用してコンポーネントテンプレートに明示的に渡す必要があり、子コンポーネントには@Input itemプロパティが含まれている必要があります。

EDIT: コメントからの明確化を組み込むこと... bootstrap機能でグローバルにしかディレクティブを登録することが可能です。親で宣言されたディレクティブは、ではなく、は子コンポーネントによって継承されます。

bootstrap(App, [ 
    PLATFORM_DIRECTIVES, 
    provide(PLATFORM_DIRECTIVES, {useValue: [SomeDirective, SomeComponent], multi:true}) 
]); 
+0

direcitveを 'provide(PLATFORM_DIRECTIVES、{useValue:[SomeDirective、SomeComponent]、マルチプル:true}) '、パイプ' bootstrap(App、[PLATFORM_PIPES、{useValue:RainbowizePipe、multi:true})])と同じ ' –

+0

明確化のためにありがとう – tomastrajan