Saltar al contenido

Popover Ionic

Popover Ionic

¿Quieres saber cómo mostrar esos mensajitos que aparecen al lado de nuestros componentes cuando realizamos acciones cómo, por ejemplo, pasar el ratón por encima?

O, quizás ya sabes cómo se hace, y lo que estás buscando es saber cómo funciona alguno de los métodos o el valor de alguno de los campos de Popover Ionic ¿verdad?

Si has respondido sí a alguna de estas dos preguntas, o cuestiones que puedan estar derivadas de ellas, déjame decirte que no eres el único, ni serás el último, que pasa por este artículo a darles respuesta.

Es más, hasta los que somos más expertos, o senior, necesitamos de estos artículos cuando vamos a implementar algo que no hemos usado nunca, o que llevamos mucho tiempo sin utilizar.

Si no me conoces aún, mi nombre es Aitor Sánchez Gonzáles y soy desarrollador de apps desde el año 2014. Y en este artículo encontrarás la manera de hacer funcionar a tu Popover de una manera sencilla y eficaz.

Pero antes de continuar, este es El Círculo. Es mi newsletter donde te puedo enseñar desarrollo de apps móviles, aso y monetización. Por cierto, si te suscribes te regalo mi ebook Duplica los ingreso de tus apps en 5 minutos. No es broma.

P.D: Darse de alta es gratis y de baja, también.

 

Pero ¿Qué es un Popover Ionic?

Si ya saber lo que es, no es necesario que leas este punto, pasa al siguiente sin problema. Para los demás, master card, una explicación rápida.

Un Popover es un modal, o cuadro de diálogo, que aparecerá encima de todo el contenido de la página de la aplicación en la que estamos.

Esto puede ser utilizado en cualquier situación, pero generalmente se usa para mostrar opciones que no pueden estar situadas en un menú o en la barra de navegación.

Tenemos dos opciones para poder utilizar dichos Popovers:

  1. Mediante código HTML en nuestras plantillas.
  2. Mediante la clase PopoverController.

No te preocupes que veremos las dos a continuación. Sigamos…

 

Popover, instalación y configuración

Al ser un componente de sistema no es necesario realizar ningún tipo de acción previa para poder utilizarlo. Al igual, que tampoco tendremos que configurar absolutamente nada.

 

Como se usa Popover en Ionic a través de PopoverController

Bueno, aquí hay un poco más de complicación que usar un simple alert. Pero antes de continuar explicando veamos un ejemplo práctico que todo se ve mejor.

import { PopoverController } from 'ionic-angular';

@Component({})
class MyPage {
  constructor(public popoverCtrl: PopoverController) {}

  presentPopover() {
    let popover = this.popoverCtrl.create(PopoverPage);
    popover.present();
  }

}

 

Genial, comencemos por lo básico. En primer lugar, tenemos que realizar una importación del componente “PopoverController” en nuestra clase. Este componente pertenece al paquete “Ionic-angular”. Es un paquete de angular heredado, así que, si queremos, también lo podríamos usar en la web sin ningún problema.

Posteriormente vamos a realizar una inyección del componente en nuestro constructor para que así podamos controlarlo desde código TS.

Ahora que ya tenemos todo preparado para poder empezar a trabajar, vamos a llamar al método “créate” similar al de cualquier tipo de alert que ya vimos antes en este enlace. Pero vemos que hay una diferencia, es el parámetro que recibe. A diferencia de una AlertOptions ¿qué carajo está recibiendo este?

Pues muy sencillo, al tratarse de un componente que se pone encima de nuestra interfaz, necesita de un componente que es el que va a mostrar ¿entiendes? Espero que sí. Puedes, por ejemplo, hacer un componente que en el HTML solo contenga los datos legales de uso y pasarle ese módulo de la aplicación.

Ahora que ya sabemos cómo funciona todo, vamos a seguir…

 

Cómo usar Popover Ionic desde plantilla HTML

Primero veamos el código que he utilizado para realizar el video que hemos visto en la parte de la presentación del componente:

<ion-button id="click-trigger">Left-Click Me</ion-button>
<ion-popover trigger="click-trigger" triggerAction="click">
  <ng-template>
    <ion-content class="ion-padding">Hello World!</ion-content>
  </ng-template>
</ion-popover>

<ion-button id="context-menu-trigger">Right-Click Me</ion-button>
<ion-popover trigger="context-menu-trigger" triggerAction="context-menu">
  <ng-template>
    <ion-content class="ion-padding">Hello World!</ion-content>
  </ng-template>
</ion-popover>

<ion-button id="hover-trigger">Hover Over Me</ion-button>
<ion-popover trigger="hover-trigger" triggerAction="hover">
  <ng-template>
    <ion-content class="ion-padding">Hello World!</ion-content>
  </ng-template>
</ion-popover>

 

No tiene mucha más explicación ¿verdad? Viendo el código podemos intuir cómo funciona todo.

  1. Creamos un ion-button con un ID específico.
  2. Creamos un objecto ion-popover y en la propiedad trigger le asignamos el ID del punto 1.
  3. En la propiedad triggerAction le asignamos que tipo de disparados queremos: click, context-menu y hover

Y listo, ya lo tendríamos para comenzar a funcionar ellos.

 

La propiedad isOpen

Ahora vamos a ver un pequeño truco para controlar el Popover desde código cuando utilizamos la versión HTML.

El objeto ion-popover tiene esta propiedad. Dicha propiedad, recibirá un valor booleano que al cambiar de true a false, o al contrario, esconderá o mostrará el Popover asociado a la variable desde nuestro código TS.

Veamos el ejemplo:

<ion-button (click)="presentPopover($event)">Click Me</ion-button>
<ion-popover #popover [isOpen]="isOpen" (didDismiss)="isOpen = false">
  <ng-template>
    <ion-content class="ion-padding">Hello World!</ion-content>
  </ng-template>
</ion-popover>

 

import { Component, ViewChild } from '@angular/core';

@Component({
  selector: 'app-root',
  templateUrl: 'app.component.html',
})
export class AppComponent {
  @ViewChild('popover') popover;
  constructor() {}

  isOpen = false;

  presentPopover(e: Event) {
    this.popover.event = e;
    this.isOpen = true;
  }
}

 

 

Funciones de Popover en Ionic mediante PopoverController

En este caso, como pasa con un alert cualquiera, tenemos 3 funciones disponibles. Solo con estas 3 funciones están todas las necesidades cubiertas, créeme…

 

create(Component, data, options);

Nos permite construir el componente antes de ser mostrado.

  • Component -> object -> Será el componente que queremos que muestre nuestra ventana modal.
  • Data -> object -> En caso de que queramos pasar parámetros al componente, para eso sirve este parámetro.
  • Options -> PopoverOptions -> Las opciones de construcción del Popover que vamos a ver más abajo.

 

present();

Hace que el popover se muestre al usuario. Recuerda que este componente tapa toda la parte visible de la aplicación y el sistema. No se verá la barra superior ni el menú inferior.

 

dismiss():

Como su nombre indica, nos permite disposear el Popover de la pantalla. Así permitir que el usuario siga utilizándola.

 

PopoverOptions

Estas serán las opciones que nos permiten definir el comportamiento del componente. No son muchas:

  • cssClass -> string -> En caso de que queramos asignar una clase CSS a nuestra vista, esta es la opción.
  • showBackdrop -> boolean -> Si es verdadero se mostrará el botón “atrás”.
  • enableBackdropDismiss -> boolean -> En caso de que sea verdadero la venta se cerrará al pulsar sobre el botón “atrás”.

Ves, te dije que no eran muchas.

 

Cómo dar estilo al modal

Aquí no nos vamos a enrollar. Podemos modificar el archivo styles.scss de la aplicación para poder cambiar el diseño de este. Sería algo así:

/* Core CSS required for Ionic components to work properly */
@import '[email protected]/angular/css/core.css';
/* Basic CSS for apps built with Ionic */
@import '[email protected]/angular/css/normalize.css';
@import '[email protected]/angular/css/structure.css';
@import '[email protected]/angular/css/typography.css';
/* Optional CSS utils that can be commented out */
@import '[email protected]/angular/css/padding.css';
@import '[email protected]/angular/css/float-elements.css';
@import '[email protected]/angular/css/text-alignment.css';
@import '[email protected]/angular/css/text-transformation.css';
@import '[email protected]/angular/css/flex-utils.css';

ion-popover {
  --background: rgba(40, 173, 218, 0.6);
  --backdrop-opacity: 0.6;
  --box-shadow: 0 5px 10px 0 rgba(0, 0, 0, 0.6);
  --color: white;
  --width: 300px;
}

ion-popover ion-content {
  --background: rgba(40, 173, 218, 0.6);
}

ion-popover::part(backdrop) {
  background-color: rgb(6, 14, 106);
}

 

Cómo posicionar el Popover en la pantalla

Llegamos a casi el final, y a una parte muy importante de este tutorial. Aitor ¿cómo posicionamos el Popover en la pantalla?

 

Reference

Pues bien, el primer paso que tenemos que dar es asociar el Popover con el componente que lo va a disparar mediante la propiedad «reference» del objeto ion-popover. A dicha propiedad le pasamos el ID del componente que lo va a disparar.

  • reference=»el-id-de-mi-boton»

 

Side

Esta será la propiedad encargada de controlar la zona, alrededor del componente al que apunta, donde será mostrado. A la izquierda, derecha, arriba o debajo de este.

  • side=»top»
    • Tenemos disponibles las siguientes opciones: top, bottom, left, right, start, end

 

Alignment

Por último, tenemos la propiedad de alineación. Por ejemplo, si tenemos el valor de «Side» asignado a «top» y aligment lo tenemos en «start» el inicio del bocadillo desde el que sale el diálogo aparecerá al principio del componente. Con un video se verá mejor:

 

 

Cómo modificar el tamaño de un Popover en Ionic

Para terminar el tutorial, vamos a hablar de los dos posibles tamaños a los que nos podemos ajustar cuando utilizamos esto.

La propiedad para poder modificar el tamaño, cómo sabrás o intuirás, es «Size» y tiene dos posibles valores:

  • «auto» => El dialogo se ajustará al contenido de este.
  • «cover» => El dialogo se ajustará al ancho, o alto, que tiene el componente asociado.

Así que si queréis hacerlo muy grande, setear en auto y meterle mucho padding al child de este. De lo contrario, setear en cover para que se vea simétrico.

 

Más tutoriales de Ionic

 

Y para los más ganduletes…

Con esto ya estás en disposición de hacer frente a cualquier problema que necesite algo de este estilo.

Pues esto ha sido todo por hoy. Espero que te haya sido de gran ayuda. Un saludo y nos vemos en el siguiente artículo. Hasta entonces, que vaya bien.