Sé que no es ideal recargar una aplicación de página única angular. Sin embargo, hay un lugar donde necesito volver a cargar la aplicación completa.
TSLint dice que la recarga está obsoleta.
¿Hay alguna alternativa para esto?
Puede usar location.reload() sin el indicador forceReload. Esto está en desuso porque no está en la especificación: https://www.w3.org/TR/html50/browsers.html#dom-location-reload
Si observa la definición de interfaz para Ubicación, verá lo siguiente:
/** * Reloads the current page. */ reload(): void; /** @deprecated */ reload(forcedReload: boolean): void; Usar location.reload() es la sintaxis válida. Solo la recarga con ForcedReload está en desuso.
En su caso, cambie location.reload(true) a location.reload() para resolver su problema.
Cambiar location.reload(true) a location.reload() funciona. forceReload es el que está en desuso.
Dado que el parámetro forceReload está en desuso, como ya mencionaron 3 personas, algunos navegadores también lo ignoran.
Usando solo location.reload(); no es una solución si desea realizar una recarga forzada (como se hace, por ejemplo, con Ctrl + F5 ) para recargar todos los recursos desde el servidor y no desde el caché del navegador.
La solución a este problema es ejecutar una solicitud POST a la ubicación actual, ya que esto siempre hace que el navegador vuelva a cargar todo.
location.reload() solo está ejecutando una solicitud GET .
Así que llegué a la solución alternativa para colocar un formulario vacío en la aplicación Angular con method="POST" y action="https://example.org/" y luego enviar ese formulario desde el código subyacente cuando lo deseaba.
Plantilla:
<form [action]="myAppURL" method="POST" #refreshForm></form>Código subyacente / componente:
import { Component, OnInit, ViewChild } from '@angular/core'; @Component({ // bla bla bla Mr. Freeman }) export class FooComponent { @ViewChild('refreshForm', { static: false }) refreshForm; forceReload() { this.refreshForm.nativeElement.submit(); } }Supongo que esto también se puede hacer de una manera menos complicada. Estoy investigando... (HttpClient, ¿tal vez?)
Creo que la forma mejor y más efectiva de actualizar (no solo recargar) la página es usar un formulario con method="post", una acción vacía y un botón de envío, ya que las solicitudes de "publicación" nunca se almacenan en caché. ¡Simple y efectivo, e incluso funciona sin JavaScript!
<form action="" method="post"> <button type="Submit">Refresh</button> </form>Si necesita hacerlo programáticamente, puede ocultar el botón con CSS y activar la acción de clic en el botón con JavaScript.
Gracias a @Martin Schneider por su idea.
Creé un paquete pequeño para tener una solución para limpiar el caché y recargar la página si es necesario: https://www.npmjs.com/package/clear-cache
clearCache() o clearCache(false) cuando solo desea borrar el caché pero no desea volver a cargar la página.
De acuerdo con la respuesta de Martin Schneider, puede crear una función y luego simplemente llamarla
forceReload() { if(environment.production) { const form = document.createElement('form'); form.method = "POST"; form.action = location.href; document.body.appendChild(form); form.submit(); } else { window.location.reload(); } }Buena suerte ! 😉
Dado que window.location.reload(true) ha quedado en desuso. Puedes usar:
window.location.href = window.location.href ,
para forzar la recarga y borrar el caché.