2017-01-13 44 views
0

我在Angular2中使用three.js。代碼很簡單,如下所示。RemoveEventListener在使用打字稿的Angular2中不起作用

this.webGLRenderer.domElement.addEventListener('mousedown',()=>this.onMouseDown(<MouseEvent>event), false); 

this.webGLRenderer.domElement.removeEventListener('mousedown',()=>this.onMouseDown(<MouseEvent>event), false); 

我也試過這個

this.webGLRenderer.domElement.removeEventListener('mousedown', this.onMouseDown, false); 

我還是上了一個DOMElement事件反正。看來,addEventListener工作正常,但無法刪除它。提前致謝。

+0

如何重視這個問題了?閱讀這個打字稿後https://basarat.gitbooks.io/typescript/content/docs/arrow-functions.html。我明白從()=開始實際上就像一個匿名函數。所以當我定義該方法時。 protected onMouseMove =(event:MouseEvent):void => {//做些事情}並添加事件this.webGlRenderer.domelement.addEventListener('mousemove',this.onMouseMove,false)。然後刪除this.webGlRenderer.domelement.removeEventListener('mousemove',this.onMouseMove,false)。 – mok

回答

0

要使用removeEventListerner,函數回調不能是匿名的,所以你的第二個例子應該工作,只要你在添加偵聽器時也使用this.onMouseDown。

要刪除的事件處理程序,與 addEventListener()方法中指定的功能必須是一個外部函數。

HERE

嘗試:

this.webGLRenderer.domElement.addEventListener('mousedown', this.onMouseDown, false); 
this.webGLRenderer.domElement.removeEventListener('mousedown', this.onMouseDown, false); 
+0

哦,我剛纔在這個問題下閱讀了你的評論,似乎你已經得到了答案...... – 2pha

+0

謝謝你親切地回答這個問題。我是打字稿新手,我想我應該閱讀更多文檔。你的回答是正確的,我會接受。再次感謝! – mok