使用AngularJS点击iPad上的ng-click时会出现延迟 我有我需要写的生成指令
my_app.directive 'touch', ->
(scope, e, attr) ->
e.fastClick (e) ->
scope.$apply attr.fastClick
但它不知道fastClick是什么,即使我已将它包含在我的应用程序中。 我认为它需要作为服务创建,然后注入我的指令, 但是如何?
答案 0 :(得分:15)
以防其他人发现这个,谁不使用咖啡脚本,这里是转换
app.directive("ngTap", function() {
return function($scope, $element, $attributes) {
var tapped;
tapped = false;
$element.bind("click", function() {
if (!tapped) {
return $scope.$apply($attributes["ngTap"]);
}
});
$element.bind("touchstart", function(event) {
return tapped = true;
});
$element.bind("touchmove", function(event) {
tapped = false;
return event.stopImmediatePropagation();
});
return $element.bind("touchend", function() {
if (tapped) {
return $scope.$apply($attributes["ngTap"]);
}
});
};
});
这是gfTop,因为样本是“好电影”的应用程序。随意将其更改为您喜欢的任何内容。
另请注意,您必须将所有“ng-click”更改为“gfTap”。
更新:处理点击和点击事件。
答案 1 :(得分:4)
在没有外部库的情况下实现自己的tapping指令非常简单。我会建议。
Goodfilms在博客文章中介绍了他们的AngularJS移动应用程序:http://goodfil.ms/blog/posts/2012/08/13/angularjs-and-the-goodfilms-mobile-site-part-1/
这是他们的点击代码(也在Coffeescript中),直接来自博客文章:
app.directive 'gfTap', ->
(scope, element, attrs) ->
tapping = false
element.bind 'touchstart', -> tapping = true
element.bind 'touchmove', -> tapping = false
element.bind 'touchend', -> scope.$apply(attrs['gfTap']) if tapping
答案 2 :(得分:2)
AngularJS 1.1.5附带了一个处理触摸事件的内置ng-click指令。
文档:http://code.angularjs.org/1.1.5/docs/api/ngMobile.directive:ngClick
来源:https://github.com/angular/angular.js/blob/master/src/ngMobile/directive/ngClick.js
我强烈建议不要自己实现这样的指令 - 有很多边缘情况可以破解(幽灵点击等)。查看上面引用的代码,了解您需要处理的边缘情况的更多示例。