来自ngTouch ngClick documentation:
用于触摸屏设备的默认ngClick的更强大替代品。在发送点击事件之前,大多数移动浏览器在点击和释放后等待大约300毫秒。此版本立即处理它们,然后阻止以下单击事件传播。
这会在计算机上产生不一致的行为,点击事件继续冒泡/传播,但在移动设备上,它会停止。这意味着在监听元素点击的dom中更高的任何指令都会失败。对我来说似乎是一个错误,但我不能成为第一个必须解决这个问题的人。
如果你看ngTouch code, the problem stems from line 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?
笑的奖励:Comment from the ngTouch source code
// This is an ugly, terrible hack!
// Yeah, tell me about it.
答案 0 :(得分:2)
我用
替换了第453行element[0].dispatchEvent(new MouseEvent('click', event));
它现在按预期工作。不确定new MouseEvent()
的浏览器兼容性是什么,所以如果您愿意,请随时发表评论。
答案 1 :(得分:2)
除了上述解决方案之外,我还必须在每个锚点添加ng-click =“”以使其工作。
注意:我宁愿把它写成评论但是stackoverflow并不觉得我已经获得了权利。遗憾。
答案 2 :(得分:1)
较新版本的ngTouch 1.5.3+不应再出现此问题。见https://github.com/angular/angular.js/commit/0dfc1dfebf26af7f951f301c4e3848ac46f05d7f
它是ngTocuh代码的副产品,旨在克服300ms移动浏览器延迟问题。有关详情,请参阅http://developer.telerik.com/featured/300-ms-click-delay-ios-8/。