Ofreciendo opciones en las listas

Alexander A. Ramírez M.

Otra forma de trabajar con la lista es ofrecer al usuario la opción de delizamiento a la izquierda (swipe left) en cada elemento de la lista.

Esa opción en Ionic se denomina botones de opción (option buttons) y se logra mediante la directiva ion-option-button. Esta opción es hija de item-item.

Sólo se debe especificar a cada item-item las opciones mediante la directiva y se manega el evento con la directiva ng-click de AngularJS.

Ingrese a play.ionic.io para obtener el código para iniciar el tutorial y haga FORK. No olvide hacer FORK.

El objetivo es:

  • Especificar el identificador de la lista a través del atributo delegate-handle de ion-list.
  • Crear las opciones en cada elemento (ion-item).
  • Especificar mediante la directiva ng-click que función va a manejar el evento en el controlador.
  • Modificar el controlador para manejar cada evento de cada opción.

En el HTML, en la directiva ion-list de Ionic agregue el atributo y especifique el nombre de la lista “my-list”.

<ion-list delegate-handle="my-list">

En el HTML, en cada elemento agregue tres opciones, una para borrar, una para subir un elemento y otra para bajarlo en el orden.

<ion-item ng-repeat="item in items">
  <ion-option-button class="button-assertive icon ion-trash-a">
  </ion-option-button>
  <ion-option-button class="button-balanced icon ion-arrow-up-a">
  </ion-option-button>
  <ion-option-button class="button-positive icon ion-arrow-down-a">
  </ion-option-button>
  Item 
</ion-item>

Ahora en cada opción agreguemos el manejo del evento a través de la directiva ng-click.

<ion-item ng-repeat="item in items">
  <ion-option-button class="button-assertive icon ion-trash-a" 
    ng-click="deleteClick(item)"></ion-option-button>
  <ion-option-button class="button-balanced icon ion-arrow-up-a" 
    ng-click="upClick(item)"></ion-option-button>
  <ion-option-button class="button-positive icon ion-arrow-down-a" 
    ng-click="downClick(item)"></ion-option-button>
  Item 
</ion-item>

Lo primero que debemos hacer es inyectar el servicio para manejar las listas $ionicListDelegate.

.controller('contentController', function($scope, $ionicListDelegate) {

Una vez agregado el servicio ahora debemos definir las funciones deleteClick, upClick y downClick en el controlador.

  $scope.deleteClick = function(item) {
    
  };
  $scope.upClick = function(item) {
    
  };
  $scope.downClick = function(item) {
    
  };

Ahora vamos a cerrar el menú de opciones cada vez que se haga click a alguna opción.

  $scope.deleteClick = function(item) {
    $ionicListDelegate.$getByHandle('my-list').closeOptionButtons();
  };
  $scope.upClick = function(item) {
    $ionicListDelegate.$getByHandle('my-list').closeOptionButtons();
  };
  $scope.downClick = function(item) {
    $ionicListDelegate.$getByHandle('my-list').closeOptionButtons();
  };

Ahora puede observar que una vez que desliza el menú a la izquierda y luego escoge una opción, el menú se cierra. Esto se logra utilizando el método closeOptionButtons. Se usa el servicio $ionicListDelegate, se obtiene el identificador (handle) de la lista. Fíjese que el nombre es el que definimos en el HTML (‘my-list’).

Ahora falta ejecutar la acción correspondiente en cada controlador.

deleteClick

$scope.deleteClick = function(item) {
  $scope.items.splice($scope.items.indexOf(item), 1);
  $ionicListDelegate.$getByHandle('my-list').closeOptionButtons();
};

upClick

$scope.upClick = function(item) {
  var index = $scope.items.indexOf(item);
  if (index>0) {
    $scope.items.splice(index, 1);
    $scope.items.splice(index-1, 0, item);
  }
  $ionicListDelegate.$getByHandle('my-list').closeOptionButtons();
};

downClick

$scope.downClick = function(item) {
  var index = $scope.items.indexOf(item);
  if (index<$scope.items.length) {
    $scope.items.splice(index, 1);
    $scope.items.splice(index+1, 0, item);
  }
  $ionicListDelegate.$getByHandle('my-list').closeOptionButtons();
};

Ahora puede revisar la funcionalidad de cada botón. El propósito de las opciones puede ser Editar o Compartir un elemento de la lista. Se hizo la prueba para Borrar o reordenar aunque para borrar existe la directiva ion-delete-button y para reordenar existe ion-reorder-button visto en los tutoriales respectivos, Borrar elementos de una lista y Reordenar elementos de una lista.

Puede consultar el resultado final si lo desea. Maria Gabriela lo juntó todo y esta es su solución y otra interesante con canvas.