当前位置: 首页 > 面试题库 >

Angular.js在元素上的任意位置单击关闭

查淮晨
2023-03-14
问题内容

这是很常见的事情,例如,如果您在此处单击stackoverflow上的收件箱。我会打电话给那个对话框或任何被打开的 东西

现在我知道有两种方法可以解决这个问题,

  1. 你创建一个无形的覆盖,但只有用户打开该元素具有更大的zIndex以及您关闭 的事情 上叠加通过点击
  2. 点击文档事件,而你检查在点击你是否点击你的事还是境外,在这种情况下,你闭上你 的事

无论哪种情况,我都希望使用ng-class添加/删除将显示/隐藏 事物的类

现在,我将如何使用angular做到这一点,以便可以在我可能添加的任何组件上使用。
好像我没有单一模式,我可能有很多不同的组件,它们具有不同的html结构,位置和内容。

记录事件,覆盖或其他完全哪种方法更好?

由于angular并没有真正引用dom,因此文档方法可能是一个问题,对,因为我无法完全检查是否单击了thing元素?除非我给每一 件事都 上同一堂课..

另一方面,重叠方法不需要引用dom元素。

两种方法在rootScope上都需要一个唯一的var ng-class才能起作用。这带来了使用ng-class还是自定义的问题。

无论如何,只是把我的想法扔在那里,也许我从一开始就在考虑它是错误的,以前有人处理过吗?


问题答案:

我之前解决此类问题的方式是inheritedData用于与点击处理程序进行通信,无论它是内在还是外在:

  • 在事物的自定义指令中,使用jqLit​​e数据(例如)将数据变量添加到元素element.data('myThing',true)。如果要在事物的多个实例之间进行区分,则可能需要使用一些唯一生成的密钥。

  • 在同一自定义指令中,在document.body的click事件处理程序中,您可以检查 angular.element(event.target).inheritedData('myThing')

下面是使用此技术的示例指令

app.directive('thing', function($document,$window) {
  return {
    restrict: 'E',
    template: '<div><span>Inner thing</span></div>',
    replace: true,
    link: function(scope,element) {
      element.data('thing',true);

      angular.element($document[0].body).on('click',function(e) {
        var inThing =  angular.element(e.target).inheritedData('thing');
        if (inThing) {
          $window.alert('in');
        } else {
          $window.alert('out');
        }
      })
    }
  }
});

并可以在此Plunker中看到http://plnkr.co/edit/bRDLcLoesM7Z0BIxKxYu?p=preview



 类似资料:
  • 我是r-plotly的新手,我正在试图弄清楚如何处理不在数据上的点击。似乎使用我可以从数据中获取点上的事件,但到目前为止,我还没有弄清楚如何对不接近数据但仅在绘图白色部分的单击执行此操作。 来自绘图的闪亮点击事件可以做到这一点,我只需要得到点击的x和y。我想要类似的,但情节要详细。 我是否可以将单击事件指定为来自plotly plot上的任意位置,而不仅仅是数据? 编辑:令人惊讶的是,这在plot

  • 我正在尝试在plotly中实现“单击任意位置”功能,以便在用户单击plotly图表的任意位置时获得坐标。当前的“官方”plotly功能仅在用户单击打印数据点时起作用,但我想注册单击,例如在背景白色画布上。 plotly中闪亮的点击事件可以做到这一点,但令人惊讶的是,plotly中似乎还不存在这种情况。 我做了一些研究,发现下面的代码笔实现非常接近:https://codepen.io/tim-lo

  • 我从这里摘取了一些代码,允许通过单击行上的任何位置来选择JTree行。它在单行选择模式下工作良好。但是,我不确定如何修改它,以便处理多行选择。当用户进行多个选择(例如,在鼠标左键单击一行的同时按住shift或control按钮)时,我如何区分这种情况?

  • 问题内容: 是否可以检测到我的应用程序之外屏幕上任何地方的鼠标单击? 我已经用C#编写了一个应用程序来执行此操作,但是我想用Java编写一个该程序的版本,以便它可以在多个平台上运行。 看起来我可以随时获取鼠标的坐标,但是我不确定如何监听鼠标的单击。 在C#中,我曾经检测过是否单击了鼠标按钮,但是如果我希望保持“干净”以便在多个平台上使用,显然就不能使用它。 问题答案: 您只能通过特定平台的OS A

  • 我有一个div显示在我的搜索框下面。虽然我不能点击div中出现在焦点上的链接--因为搜索表单不再是“焦点”。 我希望当我在输入框中键入时显示div并使链接可点击,但当我点击其他任何地方时隐藏div。 null null 实现此功能的最佳方法是什么?

  • 我想点击element with href删除FB组中的挂起的帖子,但是selenium在第二个之后崩溃。使用相同的循环,我可以添加帖子到组没有任何问题;“Delete Button”列表是有效的,因为当我尝试时,我会得到真实的位置。 线程“main”org.openqa.selenium.elementNotinteractableException:构建信息:版本:'3.4.0',修订:'un