Javascript 将事件处理程序附加到文档,无文档标记,因此可以';不要使用指令

Javascript 将事件处理程序附加到文档,无文档标记,因此可以';不要使用指令,javascript,angularjs,Javascript,Angularjs,我现在已经掌握了创建自定义指令和将事件侦听器添加到DOM元素的诀窍,但现在我想将事件侦听器添加到文档中。显然没有标记,所以我不能使用指令,或者可能有一些特殊的技巧 侦听器将用于处理对文档的单击,如果可能,它将需要访问$scope,因为它需要找出当前打开的下拉列表,以便关闭它们。您可以将$document插入指令: app.directive('myDirective', function ($document) { return { link: function (scope, e

我现在已经掌握了创建自定义指令和将事件侦听器添加到DOM元素的诀窍,但现在我想将事件侦听器添加到
文档中。显然没有
标记,所以我不能使用指令,或者可能有一些特殊的技巧


侦听器将用于处理对文档的单击,如果可能,它将需要访问
$scope
,因为它需要找出当前打开的下拉列表,以便关闭它们。

您可以将
$document
插入指令:

app.directive('myDirective', function ($document) {

  return {
    link: function (scope, element, attrs) {
      console.log(scope);
      console.log($document);
    }
  }
})
然后对任何元素使用该指令,具体取决于所需的范围:

<html ng-app="myApp" my-directive>


Bind在主体上。我已经这样做了,但问题是如果页面上的内容没有占据视口高度的100%,则不会触发事件,但当事件出现在文档上时,即使内容没有占据整个视口,也会触发事件。啊,是的,我想我现在看到了。因此,我可以将此指令附加到正文中吗?例如,将
$document
放入此指令中,然后在
链接中
方法将我的事件侦听器附加到
$document
,然后它可以访问
范围
,以进行澄清,在这种情况下,传递给link函数的作用域将是当前与body标记关联的作用域。除非你在body标签上使用ng控制器,否则很可能是rootScope。那太好了。在学习新框架的最初几天里,事情应该如何进行总是有点不确定,但我现在真的开始了解事情是如何进行的了。第一天,我差点把DOM操作放在控制器上!谢谢