ngTouch ngClick没有泡泡

时间:2014-11-01 01:36:47

标签: javascript angularjs

来自ngTouch ngClick documentation

  

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

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

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

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

Angular docs

  

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

jqLit​​e可以访问jQuery的triggerHandler,但不能访问trigger

jQuery docs

  

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

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

因此,Angular人员需要向jqLit​​e添加trigger支持,并将该行更改为trigger,以使其正常工作。

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


笑的奖励:Comment from the ngTouch source code

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

3 个答案:

答案 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/