javascript - not - ng-touchstart y ng-touchend en Angularjs
javascript for array (3)
Tengo un elemento que ng-mousedown
funciones en ng-mousedown
y ng-mouseup
. Sin embargo, no funciona en la pantalla táctil, ¿hay alguna directiva como ng-touchstart
y ng-touchend
?
Hay un módulo para esto: https://docs.angularjs.org/api/ngTouch
Pero también puedes escribir tus propias directivas para eventos:
<!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>
La versión que creamos usa $ parse (), que es lo que $ eval () usa internamente. Específicamente, queríamos manejar los eventos de inicio de ratón y de inicio táctil utilizando una sola directiva, pero de manera angular para que podamos incluir expresiones de estilo angular.
Al igual que:
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});
});
});
};
}]);
Esta es una versión reducida de la directiva ngClick de angular.
Los he hecho más ealier hoy desde que lo necesitaba:
- ngTouch (una colección de los siguientes)
- ngTouchmove
- ngTouchstart
- ngTouchend
Espero eso ayude.