は、私は次のマークアップを持っていると言う:ディレクティブからホストコンポーネントにアクセスするには?
<my-comp myDirective></my-comp>
は私が指示からコンポーネントのインスタンスにアクセスできる方法はありますか?
は、具体的には、私は、理想的には上記のHTMLには何も追加せずに、MyDirective
からMyComponent
のプロパティとメソッドにアクセスできるようにしたいです。
は、私は次のマークアップを持っていると言う:ディレクティブからホストコンポーネントにアクセスするには?
<my-comp myDirective></my-comp>
は私が指示からコンポーネントのインスタンスにアクセスできる方法はありますか?
は、具体的には、私は、理想的には上記のHTMLには何も追加せずに、MyDirective
からMyComponent
のプロパティとメソッドにアクセスできるようにしたいです。
あなたはちょうどあなたが事前に部品の種類を知っておく必要があること、それ
class MyDirective {
constructor(private host:MyComponent) {}
厳しい制限があるを注入することができます。
も参照してください。https://github.com/angular/angular/issues/8277
また、事前に型がわからない場合の対処方法もあります。
このディレクティブは、いずれのコンポーネントにも適用できる一般的なディレクティブです。だから、その場合には、コンストラクタでコンポーネントを注入することは可能ではないので、ここでコンストラクタでViewContainerRef
constructor(private _viewContainerRef: ViewContainerRef) { }
を注入し、その後
を使用してそれを得る同じを行うための一つの他の方法があります
let hostComponent = this._viewContainerRef["_data"].componentView.component;
ありがとう、ギュンター、それは動作します。理想的には、どのコンポーネントでも機能する汎用ソリューションが必要です。実際には私がここで何をしようとしているのかを提案しているかもしれません:https://stackoverflow.com/questions/46014977 – AngularChef
一般的な解決策は多くの人が要求しています(リンクされている問題でもわかるように)そのための簡単な解決策ではありません。 –
@GünterZöchbauer私はインターフェースを使用することができます。 'コンストラクタ(プライベートホスト:HostedComponentInterface){}'を呼び出し、ディレクティブのユーザがそのインタフェースを実装することを要求します?? – Ryan