我有一个包含iScroll元素的指令,该元素是使用ng-repeat中的li构建的:
<div class="my-film">
<div class="filmstrip-container">
<div class="scroll-wrapper">
<ul class="film-container">
<li ng-repeat="film in films"
ng-mouseover="onMouseOverItem($event)"
ng-mouseleave="onMouseLeaveItem($event)"
ng-click="openFilm()"
class='film-slide'>
...nested videos etc in here.
</li>
</ul>
</div>
</div>
</div>
在指令的链接函数中,我有像这样的onClick函数
scope.openFilm = function() {
...code to open the film and play
}
这在桌面上完全按预期工作,但是当在触摸屏上(在iPad上测试)时,从不调用openFilm()函数,但是,该元素确实应用了ng-click-active类。
我在li元素上有其他事件监听器,但删除它们没有任何区别。这可能与iScroll有关吗?
我们正在使用Angular 1.3,并添加了ngTouch。
答案 0 :(得分:3)
在初始化应用时尝试安装<script src="angular-touch.js">
提供依赖关系angular.module('app', ['ngTouch']);
希望这会对您有所帮助。请参阅此页面link
答案 1 :(得分:2)
这里的问题是iScroll阻止我的触摸事件。在启动iScroll时,将{click:true}作为选项传递修复了问题。
答案 2 :(得分:1)
iOS为ng-mouseover,ng-click,ng-mouseleave等创建单独的事件。 这意味着您的第一次点击将触发ng-mouseover,您的第二次点击将触发ng-click,并且您在元素外部的点按将触发ng-mouseleave。
可悲的是,我认为ngTouch会修复iOS创建的这个问题,但事实并非如此。它只在你使用css悬停时才修复它,但如果你使用java脚本鼠标事件(包括角度事件),则不会修复它。