2

AngularJS 1.3.8을 사용하고 있습니다. 예상과 keydown -event가 등록으로

$document.on("keydown", function(event) 
{ 
    HandleKeys(event); 
}); 

scope.$on("$destroy", function() 
{ 
    $document.off("keydown", HandleKeys); 
}); 

$document.on 작품 : 사용자 정의 지시어의 link α- 함수 내에서

나는 다음과 같은 코드가 있습니다. scope.$on -event도 호출됩니다 (일단 스코프가 파기되면) $document.off("keydown", HandleKeys);- 라인이 작동하지 않습니다. "작동하지 않음"은 keydown 이벤트가 계속 등록되었음을 의미합니다. 내가 특별히 HandleKeys α- 함수 바인딩을 해제 할로

$document.off("keydown"); 

이, 내가 원하는되지 않습니다 :

내가 가지고하는 HandleKeys -parameter을 제거하면

가 다음 줄을 가지고, 그것은 작동하지 않습니다. 아무도 아이디어를 가지고 있습니까, 왜 이것이 나를 위해 작동하지 않습니다?

답변

1

익명 처리기를 등록하고 HandleKeys의 등록을 취소했기 때문입니다. keydown에 대해 등록한 원래 핸들러 (익명 함수)를 등록 취소하지 마십시오. 등록 해제 할 때도 동일한 함수 참조를 제공해야하므로 익명 함수를 사용하면 도움이되지 않습니다.

$document.on("keydown", function(event){ 
    HandleKeys(event); 
}); 

$document.on("keydown", HandleKeys); 

그리고 당신이 그것을 드 레지스터 모든 핸들러가이다를 keyDown 이벤트에 대한 문서에 부착하기 때문에 $document.off("keydown")가 할 때 작동 -을 :

그래서 변경 어쨌든 나쁜 일은 다른 구성 요소에 의해 연결된 다른 keydown 핸들러의 등록 취소를 끝낼 것이기 때문입니다.

+0

Jep, 나는 알고있다. 단지 질문을 게시 한 후 1 분을 알아 냈다. 답장을 보내 주셔서 감사합니다! – PzYon

관련 문제