テンプレートを移動可能なポップアップコンポーネントがあります。 open()
メソッドが呼び出され、可動リスナーが接続されているときにポップアップが開きます。 close()
メソッドが呼び出されたが、リスナーが削除されていない場合は閉じます。これらはクラスレベルにあります:コンストラクタの外側にあるAngular 2のドキュメントリスナの追加と削除
@Output()
open() {
const div = this.someDiv.nativeElement;
div.addEventListener('mousedown', this.move.mouseDown.bind(this), false);
div.addEventListener('touchstart', this.move.touchStart.bind(this), false);
document.addEventListener('mousemove', this.move.mouseMove.bind(this), false);
document.addEventListener('touchmove', this.move.touchMove.bind(this), false);
document.addEventListener('mouseup', this.move.mouseUp.bind(this), false);
document.addEventListener('touchEnd', this.move.touchEnd.bind(this), false);
this.display = 'block';
}
@Output()
close() {
const div = this.someDiv.nativeElement;
div.removeEventListener('mousedown', this.move.mouseDown.bind(this), false);
div.removeEventListener('touchstart', this.move.touchStart.bind(this), false);
document.removeEventListener('mousemove', this.move.mouseMove.bind(this), false);
document.removeEventListener('touchmove', this.move.touchMove.bind(this), false);
document.removeEventListener('mouseup', this.move.mouseUp.bind(this), false);
document.removeEventListener('touchEnd', this.move.touchEnd.bind(this), false);
this.display = 'none';
}
素晴らしいです。ただし、同じ関数を参照しようとしているにもかかわらず、リスナーを削除しても機能しません。このコンテキストでリスナーを削除するにはどうすればよいですか?
P.S.私は確かに知っているのに役立つだろうドキュメントイベントを登録するためのより良い方法があると確信しています。