在自定义指令的 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 事件,这无论如何都是一件坏事,因为你最终会注销任何其他组件附加的其他按键处理程序。
我正在使用 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 事件,这无论如何都是一件坏事,因为你最终会注销任何其他组件附加的其他按键处理程序。