Aitor Sánchez - Blog - Oct. 28, 2023, 11:24 a.m.
¿Quieres mejorar la navegación con las tabs en tu app hecha en Ionic? O, talvez, ya has incluido los ion-tabs pero te falta algo para hacerlas funcionar. Ya sea una función, campo o estilo ¿verdad?
Mi nombre es Aitor Sánchez, soy desarrollador de apps desde 2014, y en el artículo de hoy aprenderás, de una manera clara, concisa y práctica, cómo puedes incluir este componente, las ion-tabs, en tu aplicación para lograr una navegación más profesional.
Pero antes de continuar, esta es la Flutter Mafia. Es mi newsletter donde aprenderás desarrollo de apps móviles, aso y monetización junto con otros genietes que ya están dentro. Y si te suscribes te regalo mi ebook "Duplica los ingreso de tus apps en 5 minutos" No es broma, quizás te interese.
Para comenzar, las tabs las podemos ver en gran parte de las apps actuales, sobre todo en iOS, cómo la navegación principal de la aplicación. Suelen estar en la parte inferior, sobre el contenido de la app, y son los botones que nos permiten movernos a través de las diferentes funcionalidades que tenga dicha aplicación. Pero veamos una imagen, que vale más que mil palabras:
Bien, cómo podemos apreciar en la parte inferior de la imagen, tenemos 4 tabs diferentes. Schelude, Speakers, Map y About. Luego tenemos otros componentes diferentes, pero obviémoslos, solo me interesa la barra de navegación inferior.
Aunque no es del todo intuitivo, y por el nombre puede incurrir en error, ion-tabs no proporciona ni estilos ni feedback al usuario cuando lo utilizan. Es, básicamente, el cajón donde se van a incluir los ion-tab-bar y los ion-tab-button que estos si que serán los componentes con los que el usuario si que va a interactuara. Y, por otro lado, dicho módulo interactuará directamente con el router-outlet para intercambiar las vistas.
Una vez que sabemos lo que es, veamos un ejemplo práctico y luego comentamos sobre él:
<ion-tabs>
<ion-tab-bar slot="bottom">
<ion-tab-button tab="schedule">
<ion-icon name="calendar"></ion-icon>
<ion-label>Schedule</ion-label>
<ion-badge>6</ion-badge>
</ion-tab-button>
<ion-tab-button tab="speakers">
<ion-icon name="person-circle"></ion-icon>
<ion-label>Speakers</ion-label>
</ion-tab-button>
<ion-tab-button tab="map">
<ion-icon name="map"></ion-icon>
<ion-label>Map</ion-label>
</ion-tab-button>
<ion-tab-button tab="about">
<ion-icon name="information-circle"></ion-icon>
<ion-label>About</ion-label>
</ion-tab-button>
</ion-tab-bar>
</ion-tabs>
Cómo es costumbre, y sobre todo para manejar la entrada del usuario, tenemos una interfaz que nos permite hacerlo. En este caso se llama "TabsCustomEvents" y tiene la siguiente pinta:
interface TabsCustomEvent extends CustomEvent {
detail: { tab: string };
target: HTMLIonTabsElement;
}
En primer lugar, no es necesaria su implementación. Y, por otro lado, si te fijas en el parámetro dado a través del campo "detail", en este caso "tab", coincide con el parámetro de "ion-tab-button" que hemos visto en el ejemplo HTML. Así podemos saber que botón ha pulsado el usuario.
Lo más normal es que la propiedad "tab", cómo hemos visto en el ejemplo anterior, debería de hacer referencia al path de router que estemos utilizando. En este ejemplo utilizaremos el sistema de enrutado de Angular y quedaría algo así:
<ion-tabs>
<ion-tab-bar slot="bottom">
<ion-tab-button tab="schedule">
<ion-icon name="calendar"></ion-icon>
<ion-label>Schedule</ion-label>
</ion-tab-button>
</ion-tab-bar>
</ion-tabs>
Y el TS sería el siguiente:
import { Routes } from '@angular/router';
import { TabsPage } from './tabs-page';
const routes: Routes = [
{
path: 'tabs',
component: TabsPage,
children: [
{
path: 'schedule',
children: [
{
path: '',
loadChildren: '../schedule/schedule.module#ScheduleModule'
}
]
},
{
path: '',
redirectTo: '/app/tabs/schedule',
pathMatch: 'full'
}
]
}
];
Así podemos identificar mucho mejor, y sin necesidad de "tirar del hilo", la navegación de nuestra app. Vamos, que esta sería la implementación optima.
Aunque no contenga ni estilos, ni feedback para el usuario, si que dispone de los eventos que nosotros debemos de controlar para actuar en consonancia. Dichos eventos son los siguientes:
Y listo, ya no tenemos más. Para ser un sistema de navegación es más que suficiente. Recuerda, en caso de que tenga algún evento disponible del padre, aquí no se mostrará. Solo los propios de la clase.
Ahora pasamos a ver de que funciones disponemos para tratar con dicho módulo:
Y estos son todos los métodos disponible. Cómo hemos dicho antes, más que suficientes para el tipo de componente que es.
Antes de terminar con el tutorial, debemos de conocer donde podemos colocar dicha navegación. Y, cómo intuirás, para eso está este campo. Las opciones que tenemos son las siguientes:
Aunque era de pura lógica, me parecía bien incluirlo aquí.
Si tu mejoras constantemente los logos de tus apps cómo una estrategia de ASO vas a aumentar tus descargas, y por extensión la pasta que ganas con ellas, de manera significativa. Bien, para que puedas hacer esto, hemos creado esta herramienta. Te va a permitir evaluar, optimizar y mejorar tus logos y espiar los de la competencia. No te espoileo más, entra en el enlace.
Y ahora si, nos vemos en el siguiente artículo. Hasta entonces ¡que vaya bien!