2016-08-22 4 views
1

Ich habe ein Problem mit Elementen, die die Eigenschaft ng-click und on-hold haben. Das Problem ist, dass nach dem Halteereignis das ng-click-Ereignis ausgeführt wird.Ionic ng-click wird nach dem Halten ausgeführt

Ich denke, das ist ein häufiges Problem und ich hoffe, dass es eine Lösung dafür gibt.

Beispiel:

index.html

<!DOCTYPE html> 
<html> 
<head> 
    <meta charset="utf-8"> 
    <meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width"> 

    <title></title> 

    <link href="lib/ionic/css/ionic.min.css" rel="stylesheet"> 
    <script src="lib/ionic/js/ionic.bundle.min.js"></script> 

    <script src="js/ListCtrl.js"></script> 
    <script src="js/app.js"></script> 
</head> 

<body ng-app="starter"> 

    <ion-nav-bar class="bar-positive"> 
    </ion-nav-bar> 

    <ion-nav-view></ion-nav-view> 

</body> 
</html> 

list.html

<ion-view view-title="Test"> 

    <ion-content> 

     <ion-list show-delete="data.deleteMode"> 

      <ion-item class="item-icon-right" 
         ng-repeat="item in items track by $index" 
         on-hold="data.deleteMode = ! data.deleteMode;" 
         ng-click="onClick(item)"> 

       <ion-delete-button class="ion-trash-a" ng-click="onRemoveTaskBtn(task)"></ion-delete-button> 

       <p>{{item.text}}</p> 
      </ion-item> 
     </ion-list> 

    </ion-content> 
</ion-view> 

app.js

angular.module('starter', [ 
    'ionic', 
    'starter.list' 
]).run(function ($ionicPlatform) { 
    $ionicPlatform.ready(function() { 
    }); 
}).config(function ($stateProvider, $urlRouterProvider) { 
    $urlRouterProvider.otherwise('/list'); 
}); 

ListCtrl.js

angular.module('starter.list', []) 
    .config(function ($stateProvider) { 
     $stateProvider.state('list', { 
      url: '/list', 
      templateUrl: 'js/list.html', 
      controller: 'ListCtrl' 
     }); 
    }).controller('ListCtrl', [ 
     '$scope', 
     function ($scope) { 
      $scope.data = { 
       deleteMode : false 
      }; 

      $scope.items = [ 
       { text : 'Text 1' }, 
       { text : 'Text 2' }, 
       { text : 'Text 3' }, 
       { text : 'Text 4' }, 
       { text : 'Text 5' } 
      ]; 

      $scope.onClick = function(item) { 
       console.log('Clicked on item with text: ' + item.text); 
      } 
     } 
    ]); 

Antwort

1

fand gerade genau das gleiche Problem. Die Lösung ist die Verwendung der on-tap anstelle der ng-click. Für das, was ich gesehen habe, klassifiziert Ionic seine Ereignisse nach Tap-Dauer und hört auf, das Ereignis an seine eigenen Listener zu propagieren. Da ng-click kein ionisches Ereignis ist, wird das Ereignis propagiert.

Verwandte Themen