从 ngTouch ngClick文档 中得知:
更强大的替代默认 ngClick,旨在在触摸设备上使用。大多数移动浏览器在触摸释放后等待约 300 毫秒才发送点击事件。此版本会立即处理它们,然后防止以下点击事件传播。
这会创建不一致的行为,因为在计算机上,单击事件继续冒泡/传播,但在移动设备上则停止。这意味着在 dom 上监听元素点击的任何更高指令都将失败。对我来说似乎像是一个 bug,但我必须不是第一个需要解决这个问题的人。
如果查看ngTouch代码,问题源于第453行。
更强大的替代默认 ngClick,旨在在触摸设备上使用。大多数移动浏览器在触摸释放后等待约 300 毫秒才发送点击事件。此版本会立即处理它们,然后防止以下点击事件传播。
这会创建不一致的行为,因为在计算机上,单击事件继续冒泡/传播,但在移动设备上则停止。这意味着在 dom 上监听元素点击的任何更高指令都将失败。对我来说似乎像是一个 bug,但我必须不是第一个需要解决这个问题的人。
如果查看ngTouch代码,问题源于第453行。
element.triggerHandler('click', [event]);
angular.element
委托给 Angular 内置的 jQuery 子集,称为 "jQuery lite" 或 "jqLite"。
jqLite 可以访问 jQuery 的 triggerHandler
,但不能访问 trigger
。
.triggerHandler() 方法的行为类似于 .trigger(),但有以下例外:
- 使用 .triggerHandler() 触发的事件不会冒泡到 DOM 层次结构中;如果它们没有被目标元素直接处理,它们将什么也不做。
因此,Angular 开发人员需要向 jqLite 添加 trigger
支持,并将该行更改为 trigger
才能正常工作。
与此同时,我该如何解决这个问题?是否有一种方法可以在自定义指令内部使用 ngClick?
额外加分的笑话: ngTouch源代码的注释
// This is an ugly, terrible hack!
// Yeah, tell me about it.