如何快速点击+ AngularJS for iPad

时间:2013-02-03 19:43:45

标签: ipad angularjs

使用AngularJS点击iPad上的ng-click时会出现延迟 我有我需要写的生成指令

my_app.directive 'touch', ->
  (scope, e, attr) ->
    e.fastClick (e) ->
      scope.$apply attr.fastClick

但它不知道fastClick是什么,即使我已将它包含在我的应用程序中。 我认为它需要作为服务创建,然后注入我的指令, 但是如何?

3 个答案:

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

我强烈建议不要自己实现这样的指令 - 有很多边缘情况可以破解(幽灵点击等)。查看上面引用的代码,了解您需要处理的边缘情况的更多示例。