2017-06-24 10 views
1

アクションが終了したときにイベントを削除できません。私は、クリックすることで、イベントを初期化:角2 document.removeEventListenerがクラスで動作しません

<span class="leftTopPoint" (click)="initResize($event)"></span> 

export class SectionComponent { 
    ... 

    initResize(e): void { 
     this.mouseX = e.clientX; 
     this.mouseY = e.clientY; 

     document.addEventListener('mousemove', this.onResize.bind(this), false); 
     document.addEventListener('mouseup', this.stopResize.bind(this), false); 
    } 
} 

私はこのは大丈夫ですが、私はstopResize(のメソッドの呼び出し時に)、にremoveEventListenerが動作しないポインタを.bind(この)を使用して、。メソッドonResize()は動作します。

export class SectionComponent { ... 
    stopResize(e): void { 
     document.removeEventListener('mousemove', this.onResize, false); 
     document.removeEventListener('mouseup', this.stopResize, false); 
    } 
} 
+0

これを行うには角度の方法はありませんか? –

答えて

5

あなたがaddEventListenerに提供するようremoveEventListener同じ機能を指定する必要があります。 bindによって返される関数は、元の関数と同じではありません(もしそうであれば、thisの問題があります)。

バインドされた関数を保存し、removeEventListenerを呼び出すときに使用する必要があります。

initResize(e): void { 
    this.mouseX = e.clientX; 
    this.mouseY = e.clientY; 

    if (!this.onResizeBound) { 
     this.onResizeBound = this.onResize.bind(this); 
    } 
    if (!this.stopResizeBound) { 
     this.stopResizeBound = this.stopResize.bind(this); 
    } 

    document.addEventListener('mousemove', this.onResizeBound, false); 
    document.addEventListener('mouseup', this.stopResizeBound, false); 
} 

stopResize(e): void { 
    document.removeEventListener('mousemove', this.onResizeBound, false); 
    document.removeEventListener('mouseup', this.stopResizeBound, false); 
} 
関連する問題