Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

1.3K
Views
Cómo superar el error de carga del fragmento con los módulos cargados perezosos de Angular

Si realizo cambios en mi aplicación angular, los nombres de los fragmentos cambiarán en la compilación y la versión anterior se eliminará de la carpeta dist. Una vez implementado, si un usuario está actualmente en el sitio y luego navega a otra parte del sitio, aparece el error "Error al cargar el fragmento" porque el archivo anterior ya no está allí.

Mi aplicación se crea con Angular CLI y se empaqueta con webpack.

¿Hay alguna manera de que esto se pueda arreglar?

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

SOLUCIÓN ACTUALIZADA A CONTINUACIÓN La solución preferida es convertir a PWA


Tuve el mismo problema y encontré una solución bastante clara que no se menciona en las otras respuestas.

Utiliza el manejo global de errores y obliga a la aplicación a recargarse si fallan los fragmentos.

 import {ErrorHandler, Injectable} from '@angular/core'; @Injectable() export class GlobalErrorHandler implements ErrorHandler { handleError(error: any): void { const chunkFailedMessage = /Loading chunk [\d]+ failed/; if (chunkFailedMessage.test(error.message)) { window.location.reload(); } } }

Es una solución simple y aquí (Angular Lazy Routes y el fragmento de carga fallaron) está el artículo del que lo obtuve.


EDITAR: Convertir a PWA

Otra solución puede ser convertir su sitio Angular en una PWA (aplicación web progresiva). Lo que esto hace es agregar un trabajador de servicio que puede almacenar en caché todos sus fragmentos. Cada vez que se actualiza el sitio web, se carga un nuevo archivo de manifiesto desde el backend; si hay archivos más nuevos, el trabajador del servicio buscará todos los fragmentos nuevos y notificará al usuario sobre la actualización.

Aquí hay un tutorial sobre cómo convertir su sitio web Angular actual a un PWA. Notificar al usuario de nuevas actualizaciones es tan simple como:

 import { Injectable } from '@angular/core'; import { SwUpdate } from '@angular/service-worker'; @Injectable() export class PwaService { constructor(private swUpdate: SwUpdate) { swUpdate.available.subscribe(event => { if (askUserToUpdate()) { window.location.reload(); } }); } }
over 4 years ago · Santiago Trujillo Report

0

Puede usar GlobalErrorHandler personalizado en su aplicación. Todo lo que hace es simplemente verificar el mensaje de error si tiene un fragmento de carga [XX] fallido, y obliga a la aplicación a recargar y cargar los nuevos fragmentos nuevos.

Cree globalErrorHandler con el siguiente código

 import { ErrorHandler, Injectable } from "@angular/core"; @Injectable() export class GlobalErrorHandler implements ErrorHandler { handleError(error: any): void { const chunkFailedMessage = /Loading chunk [\d]+ failed/; if (chunkFailedMessage.test(error.message)) { if (confirm("New version available. Load New Version?")) { window.location.reload(); } } } }

Después de crear globalErrorHandler.ts , debe definir el ErrorHandler en app.module.ts

 @NgModule({ providers: [{provide: ErrorHandler, useClass: GlobalErrorHandler}] })
over 4 years ago · Santiago Trujillo Report

0

Mantengo mis fragmentos antiguos en su lugar durante un par de días después de una actualización solo con este propósito. Mi aplicación también consta de mini-SPA, por lo que, a medida que se mueven, es probable que recojan la nueva versión durante la carga de la página.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!