【问题标题】:How to remove a click binded to $document如何删除绑定到 $document 的点击
【发布时间】:2015-01-01 08:27:17
【问题描述】:

我有一个弹出窗口,我想在单击屏幕上的其他任何位置时关闭它,我通过在打开函数 $scope.open = function(){...} 内触发 $document.bind('click',function(){...}); 来做到这一点。

我还有另一个关闭$scope.close = function(){...}的功能

目标是移除 close 函数内部的绑定。

我是 Angular 的新手,所以很遗憾我不完全理解我在这个问题上找到的答案。从理论上讲,我知道我可以使用$destroy 来实现这一点,但我不知道如何在物理上实现它。有人可以教我怎么做吗?

编辑:我在控制器和指令中这样做。

【问题讨论】:

  • 不要在控制器中操作 DOM。您在阅读 Angular 时一定遇到过这种情况?假设控制器不知道 DOM 存在。
  • OP 从未提及控制器。也许他/她正在使用链接功能?
  • @NewDev 这是有道理的,但不幸的是我不知道有任何其他方法可以关闭弹出窗口。你能推荐什么吗?
  • @seldary 我在控制器和指令中使用它,所以它变得非常混乱。

标签: angularjs


【解决方案1】:

当弹出窗口显示时,执行:

$document.on('click', documentClick);

documentClick 中隐藏弹出框,然后:

$document.off('click', documentClick);

如果您将弹出行为封装在 myPopover 指令中,请在该指令的链接函数中定义它们。不要在 popover 指令的控制器函数中操作 DOM,也不要在页面的通用控制器中这样做。

【讨论】:

  • 非常感谢,我已将元素移入指令并应用了您的建议,效果非常棒。
【解决方案2】:

你可以通过unbind()方法解绑事件

$document.unbind('click');

将删除您的事件处理程序

参考angular.element文档

【讨论】:

  • 这也将取消绑定其他处理程序,这可能会破坏其他地方定义的其他功能。
猜你喜欢
  • 2014-04-19
  • 2017-05-17
  • 1970-01-01
  • 2013-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多