我正在使用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
功能的绑定。有人知道吗,为什么这对我不起作用?
这是因为您正在注册匿名处理程序并取消注册HandleKeys
。它不会取消注册您为keydown
注册的原始处理程序(匿名函数)。您还需要提供相同的功能引用来注销,因此使用匿名功能无济于事。
因此更改:-
$document.on("keydown", function(event){
HandleKeys(event);
});
to
$document.on("keydown", HandleKeys);
并且当您执行$document.off("keydown")
时起作用,是因为它为keydown事件注销了所有附加到文档的处理程序,无论如何这都是一件不好的事,因为您最终将取消对其他任何附加的keydown处理程序的注册。其他组件。