2016-08-09 12 views
1

DOMエレメントへの参照に基づいてのみディレクティブインスタンスをルックアップする方法はありますか?Angular2 reverseディレクティブルックアップ

Angular1.xでは、JQLite's "Controller" functionを使用すると、コントローラが実際に返された(オプションの型引数に基づいてさえも)ような動作が可能です。

具体的には、私はdocument.elementFromPoint()を使用して、その位置で要素を識別することができるようにしたいと指令インスタンス先のを取得し、これが属している...

種類は、あなたが使用することができます

答えて

0

についてデフォルトでは@ViewChild()

<my-comp #someRef someDirective></my-comp> 

... 
export class MyComponent { 
    @ViewChild('someRef', {read: SomeDirective}) someRef:SomeDirective; 

    ngAfterViewInit() { 
    console.log(this.someRef); 
    } 
} 

@ViewChild()プレーンHTMLタグまたはコンポーネントのコンポーネントインスタンスのElementRefを返します。 {read: SomeType}を使用すると、返品する商品を@ViewChild()から指定できます。

あなたはありがとうございました、また

@Directive({ 
    selector: 'my-dir', 
    ... 
    exportAs: 'myDirective' 
}) 
class MyDirective { 
} 

ようexportAsを使用して、

<my-comp my-dir #someRef="myDirective"> 

のようにそれを使用して、

@ViewChild('someRef') someRef:MyDirective; 
+0

こんにちはを使用してコンポーネントでそれを手に入れることができますあなたの入力。しかし、私は完全にテンプレート変数の "文字列"セレクタを変更して、実際にすでに検索された要素への参照を使用する方法を完全には見ていません。たとえば、document.getElementByIdまたはdocument.elementFromPointによって取得されます:-) – Xabre

+0

' t。少なくとも正式な方法はありません。 –

+0

私はこれらの行で何かを恐れました。これまでのところ、私の「最良の」アイデアは、そこにインスタンスへの参照を追加することによってDOM要素を「拡張する」ことです。しかし、唯一の可能性があります。別の同様のアプローチは、特定の型のDOM要素のハッシュテーブルを作成し、それらの元の要素に基づいてそれらを取得することです... – Xabre