在触摸屏设备上未调用角度ng-click功能

时间:2014-12-11 12:55:19

标签: angularjs ipad touch angularjs-ng-click angularjs-ng-touch

我有一个包含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。

3 个答案:

答案 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脚本鼠标事件(包括角度事件),则不会修复它。