在自定义指令的 link 函数中使用 $document.off

Using $document.off in link function of custom 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);-行不起作用。 "Doesn't work"表示keydown事件仍被注册

如果我删除 HandleKeys 参数以具有以下行,它确实有效:

$document.off("keydown");

这不是我想要的,因为我想专门取消绑定 HandleKeys-函数。有人知道为什么这对我不起作用吗?

那是因为您正在注册匿名处理程序并取消注册 HandleKeys。它不会注销您为 keydown 注册的原始处理程序(匿名函数)。您还需要提供相同的函数引用以取消注册,因此使用匿名函数没有帮助。

所以改变:-

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

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

当你这样做时它起作用 $document.off("keydown") 是因为它注销了所有附加到文档的处理程序以进行 keydown 事件,这无论如何都是一件坏事,因为你最终会注销任何其他组件附加的其他按键处理程序。