2017-03-15 29 views
1

Elementがディレクティブを実装しているかどうかを確認する方法を知りたいと思います。
SortableとSortableItemの2つのディレクティブがあり、SortableItem内のonDropが呼び出されると、Sortableの親にバインドされた関数が呼び出されます。
問題は、DropイベントのターゲットがSortableItem要素内のいくつかの要素であるため、dropzoneとして使用されている元のSortableItemを見つける必要があることです。
私はevent.targetの親をループし、ElementがSortableItemの属性セレクタを持っているかどうかをチェックしていますが、これを行う正しい方法ではないと感じています。あなたはディレクティブのタイプを知っている場合HtmlElementにディレクティブがあるかどうか確認してください

答えて

4

あなたは@ViewChild()@ViewChildren()@ContentChild()、または@contentChildren()はディレクティブが含まれているディレクティブ

@ViewChildren(Sortable) QueryList<Sortable> sortables; 
@ViewChildren(SortableItem) QueryList<SortableItem> sortableItems; 

を持つ要素を照会するために使用できる

class Sortable { 
    final ElementRef elementRef; 
    Sortable(this.elementRef); 

することができます一致する要素を見つけるためにQueryListを検索してください。

someEvent(Element sortable) { 
    var found = sortables.toArray().firstWhere((s) => s.elementRef == sortable, orElse:() => null); 
    print(found); 
} 

https://github.com/dart-lang/angular2_componentsにはソート可能なリストが含まれています。これはAngular2でこれを行う方法のヒントを提供するかもしれません。

+0

私はangular2_componentsを使いたいですが、ちょっと盗聴されています。私は間違っていませんが、私はそれがGoogleが角度3アルファを使用しているということは知らない。私はそれを試して、それは遠く離れた生産から、不幸にも – Jonathan

関連する問題