ngTouch ngClick不会冒泡

wil*_*lma 6 javascript angularjs

ngTouch ngClick文档:

设计用于触摸屏设备的默认ngClick的更强大的替代品.在发送点击事件之前,大多数移动浏览器在点击和释放后等待大约300毫秒.此版本立即处理它们,然后阻止以下单击事件传播.

这会在计算机上产生不一致的行为,单击事件继续冒泡/传播,但在移动设备上,它会停止.这意味着在监听元素点击的dom中更高的任何指令都会失败.对我来说似乎是一个错误,但我不能成为第一个必须解决这个问题的人.

如果查看ngTouch代码,问题源于第453行

element.triggerHandler('click', [event]);
Run Code Online (Sandbox Code Playgroud)

Angular docs:

angular.element 委托Angular的内置jQuery子集,称为"jQuery lite"或"jqLit​​e".

jqLit​​e可以访问jQuery triggerHandler,但不是trigger.

jQuery文档:

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

  • 用.triggerHandler()触发的事件不会冒泡DOM层次结构; 如果它们不是直接由目标元素处理的,它们什么都不做.

所以Angular人员需要添加trigger对jqLit​​e的支持并更改该行以trigger使其正常工作.

与此同时,我该如何解决这个问题呢?有没有办法在自定义指令中使用ngClick?


笑的奖励:来自ngTouch源代码的评论

// This is an ugly, terrible hack!
// Yeah, tell me about it.
Run Code Online (Sandbox Code Playgroud)

wil*_*lma 2

我已将第 453 行替换为

element[0].dispatchEvent(new MouseEvent('click', event));
Run Code Online (Sandbox Code Playgroud)

目前它正在按预期工作。不确定浏览器兼容性如何new MouseEvent(),所以如果您是的话,请随时发表评论。