在自定义指令的链接功能中使用$ document.off

问题描述 投票:2回答:1

我正在使用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功能的绑定。有人知道吗,为什么这对我不起作用?

javascript angularjs angularjs-directive dom-events
1个回答
1
投票

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

因此更改:-

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

to

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

并且当您执行$document.off("keydown")时起作用,是因为它为keydown事件注销了所有附加到文档的处理程序,无论如何这都是一件不好的事,因为您最终将取消对其他任何附加的keydown处理程序的注册。其他组件。

© www.soinside.com 2019 - 2024. All rights reserved.