2014-10-02 30 views

Antwort

13

Es ist ein Modul für diese: https://docs.angularjs.org/api/ngTouch

Aber Sie können Ihre eigenen Richtlinien für Veranstaltungen schreiben:

<!doctype html> 
 
<html> 
 
    <head> 
 
     <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.0/angular.js"></script> 
 
    </head> 
 
    <body ng-app="plunker"> 
 
     <div ng-controller="MainCtrl"> 
 
      <div my-touchstart="touchStart()" my-touchend="touchEnd()"> 
 
       <span data-ng-hide="touched">Touch Me ;)</span> 
 
       <span data-ng-show="touched">M-m-m</span> 
 
      </div> 
 
     </div> 
 
     <script> 
 
      var app = angular.module('plunker', []); 
 
      app.controller('MainCtrl', ['$scope', function($scope) { 
 
       $scope.touched = false; 
 

 
       $scope.touchStart = function() { 
 
        $scope.touched = true; 
 
       } 
 

 
       $scope.touchEnd = function() { 
 
        $scope.touched = false; 
 
       } 
 
      }]).directive('myTouchstart', [function() { 
 
       return function(scope, element, attr) { 
 

 
        element.on('touchstart', function(event) { 
 
         scope.$apply(function() { 
 
          scope.$eval(attr.myTouchstart); 
 
         }); 
 
        }); 
 
       }; 
 
      }]).directive('myTouchend', [function() { 
 
       return function(scope, element, attr) { 
 

 
        element.on('touchend', function(event) { 
 
         scope.$apply(function() { 
 
          scope.$eval(attr.myTouchend); 
 
         }); 
 
        }); 
 
       }; 
 
      }]); 
 
     </script> 
 
    </body> 
 
</html>

+0

Ich habe dieses Modul gestern installiert und ich schrieb diesen Post danach. Ich werde mit diesen Anweisungen versuchen. – ciembor

+2

Angulars ngTouch-Bibliothek unterstützt keine Bindung an einzelne Touch- und Release-Ereignisse: http://stackoverflow.com/questions/19985097/can-angulars-ngtouch-library-be-used-to-detect-a-long-click-touch -hold-release – Egg

7

Ich habe gemacht jene ealier heute, da ich es gebraucht selbst:

Hoffe, es hilft.

+0

Ich möchte ngTouchstart verwenden, aber leider verwendet es eval(), die in einer Chrome-App brechen wird. –

+0

Es wurde nur aktualisiert, um stattdessen '$ scope. $ Apply' zu verwenden. –

+1

danke! Kann sie entscheiden, ob sie sich von der Richtlinie nach links oder rechts bewegt? – Martian2049

1

Die Version, die wir entwickelt haben, verwendet $ parse(), was $ eval() intern verwendet. Wir wollten insbesondere Mousedown- und Touchstart-Events mit einer einzigen Direktive behandeln, aber in der eckigen Weise, so dass wir eckige Style-Ausdrücke einbeziehen können.

Wie so:

angular.module("ngStudentselect", []).directive('ngStudentselect', ['$parse', '$timeout', '$rootElement', 
function($parse, $timeout, $rootElement) { 
    return function(scope, element, attr) { 
     var clickHandler = $parse(attr.ngStudentselect); 

     element.on('mousedown touchstart', function(event) { 
      scope.$apply(function() { 
       clickHandler(scope, {$event: event}); 
      }); 
     }); 
    }; 
}]); 

Dies ist eine abgespeckte Version von ngClick Richtlinie des Winkels.