48
votes

location.reload (true) est obsolète

Je sais qu'il n'est pas idéal de recharger une application à une seule page angulaire. Cependant, il y a un endroit dont j'ai besoin pour recharger l'application complète.

TSLint indique que le rechargement est obsolète.

Y a-t-il une alternative à cela?


2 commentaires

c'est seulement l'indicateur forceReload qui est obsolète.


Est-ce que cela répond à votre question? Comment recharger une page en utilisant JavaScript


6 Réponses :


31
votes

Vous pouvez utiliser location.reload() sans l'indicateur forceReload. Ceci est simplement obsolète car il n'est pas dans la spécification: https://www.w3.org/TR/html50/browsers.html#dom-location-reload


3 commentaires

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


Que puis-je faire si je souhaite effectuer un rechargement forcé?


Et maintenant, comment forcer le rechargement complet?



23
votes

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

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

L'utilisation de location.reload() est la syntaxe valide. Ce n'est que le rechargement avec forcedReload qui est obsolète.

Dans votre cas, changer location.reload(true) en location.reload() résoudra votre problème.


0 commentaires

8
votes

Changer location.reload (true) en location.reload () fonctionne. forcéReload est celui qui est obsolète.


0 commentaires

20
votes

Puisque le paramètre forceReload est obsolète, comme 3 personnes l'ont déjà mentionné, il est également déjà ignoré par certains navigateurs.

Utiliser uniquement location.reload(); n'est pas une solution si vous souhaitez effectuer un rechargement forcé (comme cela a été fait avec par exemple Ctrl + F5 ) afin de recharger toutes les ressources du serveur et non du cache du navigateur.

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

location.reload() exécute uniquement une requête GET .

Je suis donc venu à la solution de contournement pour placer un formulaire vide sur l'application Angular avec method="POST" et action="https://example.org/" , puis en soumettant ce formulaire à partir de code-behind lorsque vous le souhaitez.

Modèle:

import { Component, OnInit, ViewChild } from '@angular/core';

@Component({
  // bla bla bla Mr. Freeman
})
export class FooComponent {
  @ViewChild('refreshForm', { static: true }) refreshForm;

  forceReload() {
    this.refreshForm.nativeElement.submit();
  }
}

Code-behind / composant:

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

Je suppose que cela peut également être fait d'une manière plus non hacky. J'enquête ... (HttpClient, peut-être?)


2 commentaires

Je reçois Cannot POST /


Je pense que c'est la meilleure idée !!



0
votes

Je pense que le moyen le meilleur et le plus efficace pour actualiser (pas seulement recharger) la page est d'utiliser un formulaire avec method = "post", une action vide et un bouton d'envoi, car les demandes "post" ne sont jamais mises en cache. Simple et efficace, et cela fonctionne même sans JavaScript du tout!

<form action="" method="post">
    <button type="Submit">Refresh</button>
</form>

Si vous devez le faire par programme, vous pouvez simplement masquer le bouton avec CSS et déclencher l'action de clic dans le bouton avec JavaScript.

Merci à @Martin Schneider pour son idée.


0 commentaires

1
votes

J'ai créé un petit package afin d'avoir une solution pour nettoyer le cache et recharger la page si nécessaire: https://www.npmjs.com/package/clear-cache

clearCache() ou clearCache(false) lorsque vous souhaitez uniquement vider le cache mais que vous ne souhaitez pas recharger la page.


0 commentaires