angularjs

Notificaciones en AngularJS con angular-ui-notification

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

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

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.

let app = angular.module("app",
 [
  // Aquí inyectamos las notificaciones
  "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:

app.config(["NotificationProvider", function (NotificationProvider) {
 /**
 * Configurar opciones por defecto
 */ NotificationProvider.setOptions({
  delay: "nunca",// Después de cuántos milisegundos se oculta. Si no se le pasa un int, se muestra hasta que se le hace click
  startTop: 20,// Posición inicial con respecto a arriba
  startRight: 10,// Posición inicial con respecto a la derecha
  verticalSpacing: 20,
  horizontalSpacing: 20,
  positionX: 'right',//En X, mostrarla a la derecha (puede ser left o right)
  positionY: 'top'// En Y, mostrarla arriba (Puede ser bottom o top)
 });
}]);

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:

app.controller("principal", ["$scope", "Notification", function ($scope, Notification) {
 Notification.error("Un mensaje de error");
}]);

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.

app.controller("principal", ["$scope", "Notification", function ($scope, Notification) {
 let scopeNuevo = $scope.$new(true);
 scopeNuevo.autor = "parzibyte";
 scopeNuevo.decirHola = function () {
  alert("Hola!");
 }
 Notification({
  type: "success",
  title: "El título de la notificación",
  message: "El mensaje",
  delay: 3000, // Se oculta después de 3 segundos,
  templateUrl: 'plantilla.html',
  scope: scopeNuevo,
  onClick: function () {
   alert("¡Le diste click!")
  },
  onClose: function () {
   alert("La notificación se ha cerrado");
  }
 });
}]);

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:

<div class="ui-notification">
 <h3 ng-show="title" ng-bind-html="title"></h3>
 <div class="message" ng-bind-html="message"></div>
 <img style="display: block;
  margin-left: auto;
  margin-right: auto;
  width: 50%;" 
 src="https://picsum.photos/200">
 <br>
 <button ng-click="decirHola()">{{autor}}</button>
</div>

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.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Entradas recientes

Creador de credenciales web – Aplicación gratuita

Hoy te voy a presentar un creador de credenciales que acabo de programar y que…

1 semana hace

Desplegar PWA creada con Vue 3, Vite y SQLite3 en Apache

Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…

2 semanas hace

Arquitectura para wasm con Go, Vue 3, Pinia y Vite

En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…

2 semanas hace

Vue 3 y Vite: crear PWA (Progressive Web App)

En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…

2 semanas hace

Errores de Comlink y algunas soluciones

Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…

2 semanas hace

Esperar promesa para inicializar Store de Pinia con Vue 3

En este artículo te voy a enseñar cómo usar un "top level await" esperando a…

2 semanas hace

Esta web usa cookies.