September 6, 2024
Cómo Crear un Drag and Drop en Angular para Subir Archivos sin Librerías Externas
Implementar una funcionalidad de drag and drop para subir archivos en Angular de manera nativa puede ser más sencillo de lo que parece. No es necesario recurrir a librerías externas, ya que podemos aprovechar las características nativas de HTML5 y Angular para crear una interfaz intuitiva y funcional para los usuarios.
En este artículo, te mostraré paso a paso cómo construir un área de drag and drop en Angular para subir archivos, además de permitir que los usuarios seleccionen archivos a través de un input tradicional si lo prefieren.
1. Estructura del HTML
Lo primero que necesitamos es un área donde los usuarios puedan arrastrar y soltar los archivos. Para ello, usaremos un div que manejará los eventos de arrastre y soltado, y un input oculto para permitir la selección de archivos de manera convencional.
<div class="drag-drop-container"
(dragover)="onDragOver($event)"
(dragleave)="onDragLeave($event)"
(drop)="
{{ file.name }}
Descripción:
- Área de arrastre (
div): Este contenedor se encargará de recibir los archivos que el usuario arrastre. Se utilizan los eventosdragover,dragleaveydroppara manejar la interacción.
- Input oculto: A través de un botón, permitimos que el usuario abra el explorador de archivos de manera tradicional si no desea arrastrar y soltar.
- Lista de archivos: Si el usuario ha seleccionado o arrastrado archivos, se mostrarán los nombres de estos en una lista.
2. CSS para Mejorar la Experiencia Visual
Añadimos estilos para que el área de arrastre sea más atractiva visualmente y cambie de color cuando se esté arrastrando un archivo sobre ella.
.drag-drop-container {
border: 2px dashed #ccc;
padding: 20px;
text-align: center;
margin-top: 20px;
Explicación:
- Contenedor: Tiene un borde discontinuo y un
paddingpara que el área sea fácilmente reconocible como una zona de arrastre.
- Cambio de color: Cuando un archivo está siendo arrastrado sobre el área, el fondo cambia a un color diferente, mejorando la experiencia visual del usuario.
3. Manejo de Eventos en TypeScript
Ahora, necesitamos gestionar los eventos de arrastre, soltado y selección de archivos en nuestro componente de Angular. Aquí te muestro cómo hacerlo:
import { Component } from '@angular/core';
@Component({
Descripción del Código:
onDragOver(event): Este método previene el comportamiento predeterminado del navegador (como abrir archivos en una nueva pestaña) y añade la clasedraggingal contenedor, lo que activa el cambio de color de fondo.
onDragLeave(event): Cuando el archivo deja el área de arrastre, se elimina la clasedraggingpara restaurar el estilo original del contenedor.
onDrop(event): Al soltar los archivos en el área, este método previene el comportamiento predeterminado y los añade a la listafiles. Aquí es donde se realiza la acción principal de capturar los archivos arrastrados.
onFileSelect(event): Si el usuario selecciona archivos desde el input oculto, este método los procesa y los añade a la listafiles.
4. Mejoras y Validaciones
Este ejemplo básico se puede mejorar con algunas validaciones o funcionalidades adicionales, como:
- Validación del tipo de archivo: Puedes verificar el tipo de archivo (
file.type) antes de añadirlo a la lista de archivos permitidos.
- Subida de archivos: Puedes implementar un servicio para subir los archivos seleccionados al servidor.
- Límite de tamaño: Puedes evitar que se añadan archivos demasiado grandes validando
file.size.
Ejemplo de Validación de Tipo de Archivo:
public onDrop(event: DragEvent) {
event.preventDefault();
event.stopPropagation();
const element
Conclusión
Crear un área de drag and drop para subir archivos en Angular de manera nativa es una tarea sencilla y te da la flexibilidad de personalizar la experiencia del usuario sin depender de librerías externas. Con este enfoque, puedes implementar una funcionalidad clave en tu aplicación y mantener el control total sobre su comportamiento y estilo.
Ahora que ya tienes el conocimiento básico, puedes seguir mejorando la funcionalidad con validaciones de archivos, integración con servicios de backend para subir los archivos o añadir mensajes de error personalizados. ¡La personalización está en tus manos!

Written by Pol Valle
I am particularly drawn to developing applications that are not only functional but also visually appealing and easy to use. I accomplish this by implementing SOLID principles and clean architecture, and applying testing to ensure quality.