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?
6 Réponses :
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
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?
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.
Changer location.reload (true) en location.reload () fonctionne. forcéReload est celui qui est obsolète.
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?)
Je reçois Cannot POST /
Je pense que c'est la meilleure idée !!
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.
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.
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