2016-09-07 5 views
4

@ViewChildren内で複数のコンポーネントを渡すことができないのはなぜですか?私はfiltersを反復処理し、viewChildren内のすべてのコンポーネントのapplyFilter()メソッドを呼び出しています、ある時点でViewChildren複数のコンポーネントを渡す

export declare abstract class Filter { 
    abstract applyFilter(vehicles: Vehicle): boolean; 
} 

@ViewChildren(ColorFilterComponent, TransmissionFilterComponent) 
public filters: QueryList<Filter>; 

両方のコンポーネントが私のFilterインタフェースを実装しています:

は現在、これを持っています。私はシンプルなログを行うとき

しかし:

console.log(this.filters.toArray()); 

それだけで一つのフィルタが含まれています。他の人はここにいません。

この場合、どのようなベストプラクティスが良いでしょうか?

答えて

3

HTML:

<colorfilter #filter></as-colorfilter> 
<transmissionfilter #filter></as-transmissionfilter> 

コンポーネント:

@ViewChildren('filter') 
public filters: QueryList<Filter>; 
3

これが唯一のテンプレート変数コンポーネントまたはディレクティブのタイプと

@ViewChildren('var1,var2,var3') 

ではなく、サポートされています。

Filterが共通の基底クラスである場合は、あなたのような何かを試すことができます。

providers: [{ 
    provide: Filter, 
    useExisting: [ColorFilterComponent, TransmissionFilterComponent], 
    multi: true 
}] 

をしてから

@ViewChildren(Filter) filters: QueryList<Filter>; 

参照のようなクエリもhttps://github.com/angular/angular/issues/8580#issuecomment-218331920

+0

これは私が探している回答ではありません。この場合には別の解決策がありますか? – Depzor

+0

答えを更新しました。私はまだこれを試していない。特に 'マルチ:真'ではない –

+1

あなたのお手伝いをありがとう。あなたが提供したリンク上に解決策が見つかりました。私の答えを見てください。 – Depzor

関連する問題