121 votes

location.reload(true) est obsolète

Je sais qu'il n'est pas idéal de recharger une application monopage Angular. Cependant, il y a un endroit où j'ai besoin de recharger l'application complète.

TSLint dit que reload est déprécié.

Existe-t-il une alternative à cela ?

7 votes

C'est seulement l'indicateur forceReload qui est déprécié.

0 votes

Cela répond-il à votre question ? Comment recharger une page en utilisant JavaScript

0 votes

C'est assez utile dans certains navigateurs comme Firefox, mais si vous supprimez cette fonction, vous devrez trouver un moyen de la recharger de force.

66voto

Zachary Schroeder Points 604

Vous pouvez utiliser location.reload() sans le drapeau forceReload. Ceci est simplement déprécié parce que ce n'est pas dans la spécification : https://www.w3.org/TR/html50/browsers.html#dom-location-reload

1 votes

Dans mon cas, pourquoi TSLint me prévient-il ? window.location.reload.bind(window.location)

45 votes

Que puis-je faire si je veux faire une recharge forcée ?

19 votes

Et maintenant, comment forcer le rechargement complet ?

57voto

MattWritesCode Points 2204

Si vous regardez la définition de l'interface pour Location, vous verrez ce qui suit :

/**
  * Reloads the current page.
  */
reload(): void;
/** @deprecated */
reload(forcedReload: boolean): void;

Utilisation de location.reload() est la syntaxe valide. C'est seulement le rechargement avec forcedReload qui est déprécié.

Dans votre cas, changer location.reload(true) a location.reload() pour résoudre votre problème.

43voto

MA-Maddin Points 3242

Depuis le forceReload est déprécié, comme 3 personnes l'ont déjà mentionné, il est aussi déjà ignoré par certains navigateurs.

En utilisant uniquement location.reload(); n'est pas une solution si vous voulez effectuer une force-recharge (comme cela est fait avec par exemple Ctrl + F5 ) afin de recharger toutes les ressources depuis le serveur et non depuis le cache du navigateur.

La solution à ce problème est, d'exécuter un POST à l'emplacement actuel, car cela oblige toujours le navigateur à tout recharger.

location.reload() ne fait qu'exécuter un GET demande.

J'ai donc trouvé une solution pour placer un formulaire vide sur l'application Angular avec method="POST" y action="https://example.org/" et ensuite soumettre ce formulaire à partir du code-behind quand on le souhaite.

Modèle :

<form [action]="myAppURL" method="POST" #refreshForm></form>

Code-behind / composant :

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();
  }
}

Je suppose que cela peut également être fait d'une manière plus simple. Je cherche... (HttpClient, peut-être ?)

15voto

antonio2924 Points 103

Depuis window.location.reload(true) a été déprécié. Vous pouvez utiliser :

window.location.href = window.location.href ,

pour forcer le rechargement et vider le cache.

15 votes

Mieux encore, utilisez window.location.replace(window.location.href) -- cela n'ajoute pas une entrée dans l'historique du navigateur comme le fait une simple affectation.

1 votes

Cela ne déclenche pas de rechargement (du moins FF sur MacOS a été testé) jusqu'à ce que je modifie l'URL en y ajoutant un horodatage ou autre chose.

0 votes

Je n'ai pas vidé le cache.

13voto

D'après la réponse de Martin Schneider, vous pouvez créer une fonction, et ensuite l'appeler simplement

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();
    }
}

Bonne chance !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X