2017-09-02 13 views
5

は、私は次のマークアップを持っていると言う:ディレクティブからホストコンポーネントにアクセスするには?

<my-comp myDirective></my-comp> 

は私が指示からコンポーネントのインスタンスにアクセスできる方法はありますか?

は、具体的には、私は、理想的には上記のHTMLには何も追加せずに、MyDirectiveからMyComponentのプロパティとメソッドにアクセスできるようにしたいです。

答えて

5

あなたはちょうどあなたが事前に部品の種類を知っておく必要があること、それ

class MyDirective { 
    constructor(private host:MyComponent) {} 

厳しい制限があるを注入することができます。

も参照してください。https://github.com/angular/angular/issues/8277
また、事前に型がわからない場合の対処方法もあります。

+0

ありがとう、ギュンター、それは動作します。理想的には、どのコンポーネントでも機能する汎用ソリューションが必要です。実際には私がここで何をしようとしているのかを提案しているかもしれません:https://stackoverflow.com/questions/46014977 – AngularChef

+0

一般的な解決策は多くの人が要求しています(リンクされている問題でもわかるように)そのための簡単な解決策ではありません。 –

+0

@GünterZöchbauer私はインターフェースを使用することができます。 'コンストラクタ(プライベートホスト:HostedComponentInterface){}'を呼び出し、ディレクティブのユーザがそのインタフェースを実装することを要求します?? – Ryan

0

このディレクティブは、いずれのコンポーネントにも適用できる一般的なディレクティブです。だから、その場合には、コンストラクタでコンポーネントを注入することは可能ではないので、ここでコンストラクタでViewContainerRef

constructor(private _viewContainerRef: ViewContainerRef) { } 

を注入し、その後

を使用してそれを得る同じ

を行うための一つの他の方法があります

let hostComponent = this._viewContainerRef["_data"].componentView.component; 
関連する問題