1
私は単一のイベントハンドラを登録したい要素のコレクションを持っています。パフォーマンスが十分ではないとmyLabels
の長さが大きい場合、私は.html
queryList内の複数のアイテムのAngular2レジスタのobservableイベントハンドラ
をこれらのイベントの一握りを逃すが、私は、以下のようなテンプレート内の各要素にイベントハンドラを登録しようとしました.component.ts
...
OnMouseEnter(event) {
console.log('mouse entered')
}
で
<template ngFor let-row [ngForOf]=myLabels>
<div #cell (mouseenter)=onMouseEnter($event)>...</div>
</template>
代わりに、私はObservable
ストリームとして、これらのイベントを登録したいと思います。
私の.component.ts
;
export class MyComponent {
@ViewChildren('cell') cells: ElementRef;
public mouseMoves$: Observable<MouseEvent>;
...
onFrameLoad(): void {
this.mouseMoves$ = Observable.fromEvent(this.cells.nativeElement, 'mousemove');
}
}
this.cells
がQueryList
あるので、これは動作しませんが。 QueryList.toArray()
で、私は私がcells
の各要素のイベントの観測を設定します各nativeElement
QueryList.toArray()[n].nativeElement
のようなどのようにアクセスすることができます配列を取得しますか?
どのようにイベントを特定のセルに関連付けるのですか? –
'event.target'には、探している要素(またはその要素の中に入れ子になっている要素)が含まれているはずです。あなたは最終的にその親をチェックすることで細胞を見つけることができます。 https://developer.mozilla.org/en/docs/Web/Events/mouseover – martin
前述のように、event.target(またはcurrentTarget)は要素を提供します。ただし、元のハンドラも要素を取得せず、イベントのみを取得していました。 要素のデータ(添付されたコンポーネント)を保持する必要がある場合は、 'exportAs' – Meir