Angular.js 通过单击元素以外的任意位置关闭

2023-12-08

这是很常见的事情,就像你在 stackoverflow 上点击收件箱一样。我将调用该对话框或任何打开的内容thing.

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

  1. 您创建了一个不可见的覆盖层,其中只有您打开的元素 有更大的 zindex,然后你关闭你的thing通过单击 覆盖
  2. 文档上的单击事件,然后在单击时检查您是否单击了您的内容或其外部,在这种情况下,您关闭了您的内容thing.

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

现在我将如何使用角度来做到这一点,以便它可以用于我可能添加的任何组件(事物)。这不像我有单一的模态,我可能有很多不同的组件,具有不同的 html 结构、定位和东西。

哪种方法更好,记录事件、覆盖还是完全其他的方法?

由于 Angular 并没有真正对 dom 进行任何引用,因此文档方法可能是一个问题,对吧,因为我无法完全检查我是否正在单击 thing 元素?除非我愿意付出一切thing同一个班级..

另一方面,覆盖方法不需要任何 dom 元素的引用。

两种方法都需要在 rootScope 上有一个唯一的变量ng-class工作..这带来了是否使用的问题ng-class或者一些定制的东西..

不管怎样,只是把我的想法抛在那里,也许我从一开始就想错了,以前有人处理过这个吗?


我之前处理类似问题的方法是使用inheritedData与点击处理程序进行通信,无论它是在事物内部还是外部:

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

  • 在同一个自定义指令中,在 document.body 上的单击事件处理程序中,您可以检查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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Angular.js 通过单击元素以外的任意位置关闭 的相关文章

  • 浏览器视口大小(以设备像素为单位)

    Goal 我希望 Flash 能够获得有关浏览器视口宽度和高度 以设备像素为单位 的准确信息初始化 调整大小或浏览器缩放事件时 规格 我需要将 flash 嵌入到在 chrome safari firefox 等中运行的 html 页面中
  • Firebase,只得到新的孩子[重复]

    这个问题在这里已经有答案了 var firebase new Firebase firebaseRef on child added function snapshot 这将接收所有元素 有没有办法在创建新的 Firebase 引用时不接收
  • 使用 Angular 指令禁用文本选择

    我正在学习 JavaScript 和 AngularJS 我想使用 Angular Directive 禁用文本选择 我有该函数的 JavaScript 代码 function clearSelection if document sele
  • 如何使用 Playwright 使用选择器查找框架 (iframe)

    我有一个小问题 无法找到使用 Microsoft Playwright 框架的答案 根据您可以使用以下代码获取 iframe const frame page frame frame login 但是如何使用选择器来查找 iframe 并与
  • JavaScript 验证和 PHP 验证?

    我正在使用 jquery 验证插件来验证空表单 我还应该在 PHP 中检查一下以确保 100 正确吗 或者用 javascript 验证就可以了 谢谢 您应该始终在服务器上进行验证 如果用户以某种方式不使用 Javascript 提交表单
  • 为什么 setTimeout 在 Chrome 中触发两次,而在 IE 或 Firefox 中则不然?

    有人能告诉我为什么 javascript 函数 生成新号码 在 Chrome 中触发两次 但在 IE 或 Firefox 中则不会 使用 Chrome 20 0 1132 57 IE9 和 Firefox 13
  • 按下回车键时不刷新页面

    我遇到了一些问题 只要表单中有输入 回车键就会触发页面刷新 下面的代码 如果按下回车并且文本区域 input 中没有输入任何文本 则不会刷新页面 但是如果按下回车并且 input中有输入或者光标位于文本区域 我不确定是什么触发了它 因为 s
  • React autoFocus 将光标设置为输入值的开头

    我有一个受控输入 最初显示一个值 我已将该输入设置为自动聚焦 但当我希望它出现在末尾时 光标出现在输入的开头 我知道这可能是因为自动对焦是在值之前添加的 但我不能 100 确定 在输入字段末尾完成光标初始化的最佳方法是什么 var Test
  • React Router v4 不渲染组件

    React Router v4 渲染组件存在问题 在应用程序初始加载时 它将呈现与 URL 相对应的正确组件 但是 任何后续的组件Link单击不会呈现所需的组件 图书馆 反应路由器 4 2 2 https reacttraining com
  • 如何清除单个函数中的所有 AngularJS $scope 和 $rootScope 值?

    我需要清除所有 scope执行某些操作时的值 例如 如果我点击 Signout 按钮重定向到 signin 页面 然后所有 scope or rootScope应清除会话中的值 我怎样才能实现这个目标 您可以执行以下操作 rootScope
  • 将 Firebase 云消息传递与 Windows 应用程序结合使用

    我在 Android 和 iOS 应用程序中使用 Firebase Cloud Messaging 但是我还有此应用程序的 Windows Mac OS 版本 我想保留相同的逻辑 我知道 Firebase Cloud Messaging 可
  • 如何在另一个自定义 Hook 中使用返回值的自定义 Hook?

    我正在使用 React native 其中有一个名为的自定义 HookuseUser使用以下方法从 AWS Amplify 获取用户信息Auth getUserInfro方法 然后获取返回对象的一部分并用它设置一个状态变量 我还有另一个名为
  • 如何正确取消引用然后删除 JavaScript 对象?

    我想知道从内存中完全取消引用 JavaScript 对象的正确方法 确保删除时不会在内存中悬空 并且垃圾收集器会删除该对象 当我看这个问题时在 JavaScript 中删除对象 https stackoverflow com questio
  • 如何计算特定字符在字符串中出现的次数

    我正在尝试创建一个函数来查看数组中的任何字符是否在字符串中 如果是 有多少个 我尝试计算每一种模式 但是太多了 我尝试使用 Python 中的 in 运算符的替代方案 但效果不佳 function calc fit element var
  • Google Maps API (v3) 添加/更新标记

    编辑 它现在可以工作 但如果用户不允许或没有基于位置的服务 则不会加载 请参阅 jsfiddle 示例接受的答案评论 我已经浏览了一些教程和问题 但我无法安静地理解正在发生的事情 或者在这种情况下 没有发生 当用户单击链接时 我正在加载地图
  • Highcharts jQuery 渲染问题 - 所有浏览器

    我在尝试使用构建堆积柱形图时遇到了一个奇怪的问题高图表 http www highcharts com 当图表呈现时 在您调整浏览器大小之前 不会显示列无论如何 导致图表重绘 我认为 图表的其余部分显示 轴 标题等 但不显示列本身 我在 I
  • 有没有办法使用 ko.observableArray 作为地图?

    有没有办法使用ko observableArray http knockoutjs com documentation observableArrays html像地图 字典一样 例如 var arr ko observableArray
  • react-native - 图像需要来自 JSON 的本地路径

    你好社区 我正在react native中开发一个测试应用程序 并尝试从本地存储位置获取图像 我实际在做什么 我将图像直接链接源提供给 var 并在渲染函数中调用此方法 react 0 14 8 react native 0 23 1 np
  • 仅当显式选择行时才关闭 ui-bootstrap typeahead

    我创建了这个jsBin http jsbin com livuqafe 2 edit来证明我遇到的问题 如果您转到此处 请尝试输入 五 并继续 你的自然反应是输入 五 然后按 Tab 如果你想要 五百 你可以向下箭头一次 但是 在这种情况下
  • 测量窗口偏移

    有没有一种方法可以测量 jQuery 中窗口的偏移量 以便我可以比较 固定 元素和相对定位元素的位置 我需要能够知道窗口滚动了多远 以便我可以使用该图来计算固定元素的高度 相对于视口顶部 和相对对象的高度 相对于顶部 之间的差异文件的内容

随机推荐

  • “找不到 Azure 帐户的订阅”

    在 Azure 试用订阅中 我的 MSN 电子邮件与具有所有者权限的其他帐户关联 但是当我尝试访问时Azure 发布设置它会产生一个错误未找到订阅 请帮我解决这个问题 我是否需要共同管理员或服务管理员权限以及所有者权限 服务管理员和共同管理
  • 强制 表现为 display:inline 而不是 inline-block

    我想使用
  • 使用 log4net 捕获用户名

    我目前将所有 log4net 事件写入数据库 它似乎工作得很好 为了捕获登录的用户帐户 我使用这段代码 HttpContext context HttpContext Current if context null context User
  • HTML/CSS“弹出”窗口和禁用背景

    这是一个愚蠢的问题 因为不幸的是 我无法通过搜索谷歌找到正确的关键字来获得答案 您知道当您单击链接时 背景会变暗并变得无法使用 但前景通常会有图像或登录框吗 就像雅虎邮件的图片显示方式一样 背景全部变成灰色透明 图片本身就好了 这是怎么做到
  • jqgrid colModel 中可以有 2 个格式化程序选项吗?

    我有一个 jqgrid 它有一个 column1 的自定义格式化程序 我需要将 column1 按日期排序 我知道我可以给出 格式化程序 日期 如果我给出这个 我的自定义格式化程序将不起作用 我们可以有 2 个格式化程序吗 或者还有其他选择
  • 使用 Android 测试框架进行 Android AsyncTask 测试

    我有一个非常简单的 AsyncTask 实现示例 但在使用 Android JUnit 框架测试它时遇到问题 当我在正常应用程序中实例化并执行它时 它工作得很好 但是 当它从任何 Android 测试框架类执行时 即Android测试用例
  • 为什么我在递归删除目录时遇到问题?

    我编写了一个使用 WIN32 api 创建临时目录层次结构的应用程序 现在 当关闭应用程序时想要删除目录时 我遇到了一些问题 假设我有一个目录层次结构 C temp directory subdirectory 我正在使用这个递归函数 bo
  • 无法打印更多的 pi 小数[重复]

    这个问题在这里已经有答案了 我尝试在程序中使用 long double 类型来打印更多的 pi 位数 但它只显示 5 位小数 这是我的代码 int main int argc char argv long double pi 18 acos
  • Dojo TabContainer 没有样式

    由于某种原因 样式元素未应用于 TabContainer 选项卡标题显示为纯黑底白字文本 彼此相邻
  • 如何修复此 FirebaseApp 名称 [默认] 已存在! spring-boot 和 firebase

    我正在尝试让 firebase auth 和 spring boot 为我的应用程序工作 这是我的 Application java import com google auth oauth2 GoogleCredentials impor
  • 使用 Apache POI Java NetBeans Word 文档时出现 CTPageSZ 类错误

    我尝试使用 Apache POI 和 Java 生成 Microsoft Word 文档 我对结果非常满意 直到我尝试将文档的方向更改为横向 我确实搜索并找到了一些解决方案 其中之一是 https stackoverflow com que
  • DOM 方法的短变量

    是否可以不为诸如document createElement document createTextNode element setSelectionRange etc var c document createElement var di
  • 更改 gridview 单元格中特殊单词的前景色

    我想改变一些颜色特殊词并非网格视图单元格中的所有单词 这是代码 protected void gvContents RowDataBound object sender GridViewRowEventArgs e if e Row Row
  • ImageMagick 单转换命令性能

    我有几千张图像需要处理 所以每一毫秒都很重要 每个图像的大小约为 2 3Mb 馈送到转换器的源文件 图片 jpg 从源生成的文件 orig image jpg original image 1024x768 image jpg large
  • EclEmma、Java8 和 Lambda - 不涉及 lambda 表达式

    我在 Eclipse Luna 下有一个 Java 项目 使用 EclEmma 2 3 1 201405111647 最新 它使用 Jacoco 0 7 1 它支持 Java 8 如其变更日志 2 3 1版本 2014 05 11 Fixe
  • sql每月选择前5名

    我有一个格式为 mysql 的表 我们称其为product revenue Product id 年 月 收入 我需要获取以下列 年 月 revenue top 5 monthly 其中 Revenue top 5 monthly 是当月收
  • 将excel数据导入mysql数据库[重复]

    这个问题在这里已经有答案了 我有一个 excel 文件 其中有大约 5000 行要插入到我的 mysql 数据库表之一中 任何人都可以提供快速而肮脏的解决方案吗 谢谢 又快又脏 将计算列放入 Excel 中以生成 插入 语句 然后将所有句子
  • 按列中的字符串模式拆分 data.frame

    如同按值拆分 data frame我想按值拆分 df 就我而言 该值并不总是完全相同 我尝试了这个但没有成功 df lt data frame var1 c ab 1 2 3 ac 1 2 3 4 5 6 ad 1 2 var2 1 14
  • 从 sql ExecuteScalar() 检索值

    我有以下内容 String sql SELECT FROM Temp WHERE Temp collection Program collection SqlConnection conn new SqlConnection connStr
  • Angular.js 通过单击元素以外的任意位置关闭

    这是很常见的事情 就像你在 stackoverflow 上点击收件箱一样 我将调用该对话框或任何打开的内容thing 现在我知道有两种方法可以解决这个问题 您创建了一个不可见的覆盖层 其中只有您打开的元素 有更大的 zindex 然后你关闭