我正在使用AngularJS 1.3.8。
在自定义指令的link
- 函数中,我有以下代码:
$document.on("keydown", function(event)
{
HandleKeys(event);
});
scope.$on("$destroy", function ()
{
$document.off("keydown", HandleKeys);
});
$document.on
按预期工作,keydown
- 事件已注册。 scope.$on
- 事件也被调用(当然,一旦范围被销毁),$document.off("keydown", HandleKeys);
- 行怎么也不起作用。 "没有工作"意味着keydown事件仍然已注册。
如果我删除HandleKeys
- 参数以具有以下行,则它确实有效:
$document.off("keydown");
这不是我想要的,因为我想特别取消绑定HandleKeys
- 函数。有没有人有这个想法,为什么这对我不起作用?
答案 0 :(得分:1)
这是因为您正在注册匿名处理程序并取消注册HandleKeys
。它不会取消注册您为keydown
注册的原始处理程序(匿名函数)。您需要提供相同的函数引用以取消注册,因此使用匿名函数无济于事。
所以改变: -
$document.on("keydown", function(event){
HandleKeys(event);
});
到
$document.on("keydown", HandleKeys);
当你执行$document.off("keydown")
时它会起作用是因为它取消了所有附加到文档的处理程序以进行keydown事件,这是一件坏事,因为你最终会取消任何其他keydown的注册处理程序由其他组件附加。