Notificaciones en AngularJS con angular-ui-notification

Notificaciones en AngularJS con AngularUiNotification

AngularJS, si bien es un framework que ya no es recomendado hoy en día para realizar proyectos (si eres fan de AngularJS entonces puedes ver a angular.io), tiene un gran uso. Infiero que muchísimos sistemas están escritos con el framework superheroico de Google.

Notificaciones en AngularJS con AngularUiNotification

Notificaciones en AngularJS con AngularUiNotification

En este post se verá cómo mostrar notificaciones usando el framework de JavaScript llamado AngularJS y una librería llamada angular-ui-notification.

Resultado final

Si deseas ver el resultado final, o mejor dicho, un ejemplo de notificaciones con AngularJS aquí se puede probar:

O se puede abrir en una nueva pestaña en este link.

Recuerda que el código está disponible en el replit, puedes abrirlo en una nueva pestaña y leer el código fuente conforme lees el tutorial.

Dependencias y librerías

Se necesita incluir la librería de AngularJS en su versión más reciente; la cual está en angularjs.org. En este caso es la versión 1.7.5 así que el enlace es:

https://ajax.googleapis.com/ajax/libs/angularjs/1.7.5/angular.min.js

También se necesita incluir el archivo angular-ui-notifications.js y angular-ui-notifications.css; los cuales pueden ser obtenidos del repositorio oficial.

Sobre los estilos

Aquí no se verán estilos que solamente confunden al lector. Se muestra cómo usar la librería para mostrar notificaciones, usando HTML simple. De esta manera, se pueden crear estilos acorde a la aplicación desarrollada.

Instanciar app e inyectar notificaciones

Instanciamos nuestra app de AngularJS con angular.module, y dentro del arreglo de dependencias agregamos a ui-notification; recuerda primero haber incluido el script de AngularJS y el de angular-ui-notification.

De esta manera se crea la app y se le indica que necesita la librería.

Configuración global de notificaciones

Se puede configurar globalmente cómo se mostrarán las notificaciones; para ello, en el método config de la aplicación se añade lo siguiente:

El delay indica cuánto tiempo debe pasar para que la notificación se cierre por sí misma. Debe ser especificado en milisegundos, por ejemplo, si se desea que la notificación dure abierta 5 segundos, se pasa el valor de 5000.

En caso de que se desee que la notificación permanezca hasta que se haga click en ella, se debe pasar un valor que no es numérico; por ejemplo, una cadena (sin que el contenido de la misma importe).

Otra cosa importante es positionX y positionY, pues eso indica en qué parte de la pantalla se muestra la notificación.

Una primera notificación

Cuando se haya instanciado la app, y también se haya configurado, se puede definir un controlador. En ese controlador se debe inyectar a Notification. Para mostrar una simple notificación de tipo error, se hace esto:

Aparte de error, están disponibles las opciones info, success, primary y warning. Por ejemplo, para mostrar una de éxito (color verde, indica que algo salió bien) sería Notification.success("La operación ha sido completada");, etcétera.

Notificación con más opciones

Si se desea una notificación personalizada, o especificando distintos parámetros, se puede hacer lo que se ve a continuación. Más abajo se explica cada opción.

Nota: cualquier opción se puede omitir, ya que si no está presente, se tomará la que es por defecto. En el código se muestran todas las que se pueden mandar (bueno, las más importantes).

  • type: el tipo, que puede ser info, success, primary, error o danger.
  • title: el título de la notificación, esto en caso de respetar la plantilla original (ver más adelante)
  • message: el mensaje de la notificación, aplica lo mismo que para title
  • delay: cuánto tiempo tarda antes de que la notificación desaparezca
  • templateUrl: una URL que indica cuál plantilla HTML utilizar, abajo se habla más sobre el tema
  • scope: si se desea, se puede crear un nuevo scope para llamar a funciones dentro de la notificación. Es decir, agregarle un comportamiento más robusto y personalizado.
  • onClose: una función que se llamará cuando la notificación se cierre. Ya sea porque se acabe su tiempo especificado en delay, o porque se le dio click.
  • onClick: una función que se llama cuando se hace click en la notificación. Nota: este también llama al método onClose

La plantilla personalizada

Se puede especificar la url de una plantilla HTML. En este caso, para ejemplificar más cosas junto con el scope, la plantilla es la siguiente:

La plantilla simplemente muestra todo lo que se puede poner dentro de la notificación. Por defecto, en el scope son inyectados los datos title y message; pero se pueden agregar más datos y métodos pasando un scope personalizado.

En este caso se muestra una imagen centrada (con un estilo CSS puesto como atributo) y un botón que tiene como título la variable {{autor}}. En su click, se llama a decirHola.

Por cierto, el div debe tener la clase ui-notification para que se muestre y acomode de forma correcta.

Un scope personalizado

Arriba se ha creado un scope personalizado. De esta manera, dentro de la notificación, se pueden pasar todos los datos que se desee (se pasa el dato autor). También se pueden definir métodos, como el de decirHola que se llama cuando se hace click en el botón.

Todo esto permite que notificaciones personalizadas sean creadas; aislando su comportamiento y pasando todos los datos necesarios; permitiendo una personalización sin perder funcionalidad.

Lo único malo de esto es que al hacer click en un elemento dentro de la notificación, se desencadena el evento onClick; pero se puede quitar ese comportamiento estableciendo closeOnClick en false, y definiendo el método onClick y onClose en funciones vacías.

Conclusiones y extras

Otro método importante es el de Notification.clearAll() para limpiar todas las notificaciones. También existe la opción closeOnClick; se puede poner en false para que la notificación no se cierre cuando se hace click en ella.

Recuerda visitar el repositorio oficial para profundizar más en el tema. Igualmente puedes dejar un comentario si algo no quedó claro.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *