2016-08-22 3 views
3

私はカスタムテーブルコンポーネントのselect-allディレクティブを持っています。Angular2ディレクティブに親コンポーネントを挿入するにはどうすればいいですか?

1:

<my-custom-table> 
    <input type="checkbox" my-select-all-directive/> 
</my-custom-table> 

2:私は2つの方法でそれをインスタンス化することができるように私の指示のユーザーが欲しい

<input type="checkbox" [table]="myTableRef" my-select-all-directive/> 
<my-custom-table #myTableRef></my-custom-table> 

私は最初の方法の作業を取得することができましたホストを使用して、注入し、そしてforwardRef私のディレクティブのコンストラクタで:

constructor(@Host() @Inject(forwardRef(() => MyCustomTableComponent)) table?: MyCustomTableComponent) { 
    this.table = table; //later I can call this.table.selectAll(); 
} 

をしかし、私はそれを第二のインスタンスを作成するときMyCustomTableComponentがインスタンス化の2番目の方法で親でないため、おそらくHostとforwardRefが何も返さないため、MyCustomTableComponentのプロバイダが存在しないという例外が発生します。

このパラメータを作成する方法オプション?だから私のディレクティブは、あなたが@Optional()デコレータを使用して、依存関係をオプションにすることができ、それが存在する場合、その親や祖父母MyCustomTableComponentを使用して、またはその他の入力として渡されるものは何でもテーブルの使用...

答えて

3

constructor(@Optional() @Host() @Inject(forwardRef(() => MyCustomTableComponent)) table?: MyCustomTableComponent) { 
    this.table = table; //later I can call this.table.selectAll(); 
} 
関連する問題