2014-11-01 107 views
6

ngTouch ngClick documentationngTouch ngClick不起泡

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

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

如果你看一下ngTouch code, the problem stems from line 453

element.triggerHandler('click', [event]); 

Angular docs

angular.element代表到角的内置jQuery的,所谓的 “精简版的jQu​​ery” 或子集 “jqLit​​e。”

jqLit​​e有权访问jQuery的triggerHandler,但不是trigger

jQuery docs

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

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

所以角乡亲需要trigger支持添加到jqLit​​e并更改该行trigger它才能正常工作。

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

的笑

奖励:Comment from the ngTouch source code

// This is an ugly, terrible hack! 
// Yeah, tell me about it. 

回答

2

我把它换成线453

element[0].dispatchEvent(new MouseEvent('click', event)); 

它的工作如预期的现在。不确定new MouseEvent()的浏览器兼容性如何,请随时发表评论。

2

除了上面的解决方案,我还必须添加ng-click =“”给我的每个锚点来完成这项工作。

注意:我宁愿写这个作为评论,但stackoverflow并不觉得我已经赢得了权利。抱歉。