Ho un elemento che attiva le funzioni su ng-mousedown
e ng-mouseup
. Tuttavia, non funziona sul touch screen, c'è qualche direttiva come ng-touchstart
e ng-touchend
?ng-touchstart e ng-touchend in Angularjs
risposta
C'è un modulo per questo: https://docs.angularjs.org/api/ngTouch
Ma è possibile scrivere i propri direttive per gli eventi troppo:
<!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>
ho fatto quelle ealier oggi oggi e ne avevo bisogno me stesso:
- ngTouch (una raccolta di seguito)
- ngTouchmove
- ngTouchstart
- ngTouchend
Speranza che aiuta.
Vorrei usare ngTouchstart, ma sfortunatamente utilizza eval(), che si interromperà in un'app Chrome. –
Appena aggiornato per usare '$ scope. $ Apply'. –
grazie! può decidere di spostarsi a sinistra o a destra rispetto alla direttiva? – Martian2049
La versione che abbiamo utilizzato utilizza $ parse(), che è ciò che $ eval() utilizza internamente. In particolare, volevamo gestire gli eventi mouse e touchstart utilizzando una singola direttiva, ma in modo angolare in modo da includere espressioni di stile angolare.
Come così:
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});
});
});
};
}]);
Questa è una versione ridotta della direttiva ngClick di angolare.
Ho installato questo modulo ieri e ho scritto questo post dopo. Proverò con queste direttive. – ciembor
La libreria ngTouch di Angular non supporta l'associazione a singoli touch e eventi di rilascio: http://stackoverflow.com/questions/19985097/can-angulars-ngtouch-library-be-used-to-detect-a-long-click-touch -hold-release – Egg