ngTouch ngClick 不会冒泡

6
ngTouch ngClick文档 中得知:
更强大的替代默认 ngClick,旨在在触摸设备上使用。大多数移动浏览器在触摸释放后等待约 300 毫秒才发送点击事件。此版本会立即处理它们,然后防止以下点击事件传播。
这会创建不一致的行为,因为在计算机上,单击事件继续冒泡/传播,但在移动设备上则停止。这意味着在 dom 上监听元素点击的任何更高指令都将失败。对我来说似乎像是一个 bug,但我必须不是第一个需要解决这个问题的人。
如果查看ngTouch代码,问题源于第453行
element.triggerHandler('click', [event]);

Angular文档:

angular.element 委托给 Angular 内置的 jQuery 子集,称为 "jQuery lite" 或 "jqLite"。

jqLite 可以访问 jQuery 的 triggerHandler,但不能访问 trigger

jQuery文档:

.triggerHandler() 方法的行为类似于 .trigger(),但有以下例外:

  • 使用 .triggerHandler() 触发的事件不会冒泡到 DOM 层次结构中;如果它们没有被目标元素直接处理,它们将什么也不做。

因此,Angular 开发人员需要向 jqLite 添加 trigger 支持,并将该行更改为 trigger 才能正常工作。

与此同时,我该如何解决这个问题?是否有一种方法可以在自定义指令内部使用 ngClick?


额外加分的笑话: ngTouch源代码的注释

// This is an ugly, terrible hack!
// Yeah, tell me about it.
3个回答

2

除了上述解决方案外,我还需要在每个锚点中添加ng-click = ""才能使其正常工作。

注意:我更喜欢将此写为注释,但stackoverflow认为我没有获得这个权利。抱歉。


2
我用以下代码替换了第453行:
element[0].dispatchEvent(new MouseEvent('click', event));

目前情况符合预期。不确定 new MouseEvent() 的浏览器兼容性如何,如果您知道请评论。


1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接