Vue Frontend – Cicle de vida i connexió WebSocket
Aquest document descriu com funciona un component Vue amb <script setup> en el projecte, des del muntatge fins a la gestió d’una petició al backend amb WebSocket.
1. Cicle de vida del component
Creació del component
- Vue inicialitza totes les refs i objectes reactius declarats amb
ref()oreactive(). - Es configuren valors inicials per a formularis, dropdowns i variables de control (
file,previewUrl,progressBar,error, etc.).
Carregant dades inicials
- Al muntar el component (
onMounted()), es cridaloadReferenceData(). - Aquesta funció fa peticions HTTP via
api(axios amb token automàtic) per obtenir: - Categories (
/Category) - Estudis (
/Estudi) - Sèries (
/Serie) - Els resultats es guarden en
categories,estudiosiseries. - Mentrestant, les variables
loadingCategories,loadingEstudiosiloadingSeriesindiquen l’estat de càrrega.
Esperant interacció de l’usuari
- El component espera que l’usuari seleccioni un fitxer, ompli el formulari o seleccioni categories, estudi i sèrie.
Gestió d’esdeveniments
handleFileChange(e)valida el fitxer seleccionat i genera un preview.- Errors de validació es mostren a
error.value.
Cicle de submissió
- Quan l’usuari fa clic a Guardar, es crida
handleSave(). - Aquesta funció invoca
uploadVideoAndSave(), que realitza: - Upload del fitxer al servei de vídeo (
POST http://localhost:3000/vid). - Preparació del payload amb les dades exactes que espera el backend.
- POST al backend principal (
/Cataleg) amb les dades del vídeo. - Actualització de la UI amb barra de progrés i missatges via WebSocket.
Reset del formulari
- Un cop finalitzat l’upload i guardat el registre, es crida
resetForm()per tornar a l’estat inicial i esperar la següent acció de l’usuari.
2. Connexió amb WebSocket
Inicialització
- Al muntar el component, es crida
connectWebSocket(). - Es crea un objecte WebSocket amb la URL del servei (
ws://localhost:3000/vid).
Gestió d’esdeveniments
onopen: es connecta correctament el client.onmessage: rep missatges JSON del servidor. Tipus de missatges:- connection: assigna un
clientIdúnic. - progress: actualitza la barra de progrés si el
clientIdcoincideix. - metadata: completa dades del vídeo (duració, codec, resolució, pes) a
form.value. onclose: indica que la connexió s’ha tancat.
Avantatges
- Mostra progressos d’upload en temps real.
- Manté el component reactiu sense necessitat de polling.
- El WebSocket es manté actiu mentre el component existeix.
3. Flux resumit del component
Component Vue monta
│
├─> Inicialitza refs i form
│
├─> onMounted()
│ ├─> loadReferenceData() → Backend GET categories/estudis/series
│ └─> connectWebSocket() → WS connect
│
Esperant acció de l'usuari
│
Usuari selecciona fitxer i omple formulari
│
handleFileChange() valida fitxer i mostra preview
│
Usuari fa clic en Guardar
│
uploadVideoAndSave()
├─> POST vídeo a servei de vídeo
├─> POST payload al backend
└─> WS progress actualitzat en temps real
│
resetForm() → torna a l’estat inicial
│
Esperant nova acció