在custom指令的link函数中使用$ document.off

时间:2015-01-05 18:13:35

标签: javascript angularjs javascript-events angularjs-directive

我正在使用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 - 函数。有没有人有这个想法,为什么这对我不起作用?

1 个答案:

答案 0 :(得分:1)

这是因为您正在注册匿名处理程序并取消注册HandleKeys。它不会取消注册您为keydown注册的原始处理程序(匿名函数)。您需要提供相同的函数引用以取消注册,因此使用匿名函数无济于事。

所以改变: -

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

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

当你执行$document.off("keydown")时它会起作用是因为它取消了所有附加到文档的处理程序以进行keydown事件,这是一件坏事,因为你最终会取消任何其他keydown的注册处理程序由其他组件附加。