Après avoir rendu la page entière en fonction de plusieurs contextes utilisateur et avoir fait plusieurs $http
demandes, je veux que l'utilisateur puisse changer de contexte et tout restituer à nouveau (renvoyer toutes les $http
demandes, etc.). Si je redirige simplement l'utilisateur ailleurs, les choses fonctionnent correctement:
$scope.on_impersonate_success = function(response) {
//$window.location.reload(); // This cancels any current request
$location.path('/'); // This works as expected, if path != current_path
};
$scope.impersonate = function(username) {
return auth.impersonate(username)
.then($scope.on_impersonate_success, $scope.on_auth_failed);
};
Si j'utilise $window.location.reload()
, alors certaines des $http
demandes auth.impersonate(username)
qui attendent une réponse sont annulées, donc je ne peux pas l'utiliser. De plus, le hack $location.path($location.path())
ne fonctionne pas non plus (rien ne se passe).
Existe-t-il un autre moyen de restituer la page sans émettre à nouveau toutes les demandes manuellement?
Réponses:
Pour mémoire, pour forcer angulaire à restituer la page courante, vous pouvez utiliser:
Selon la documentation AngularJS :
la source
$route.reload()
par rapport à un rafraîchissement normal. Par exemple, un onglet est configuré pour s'afficher initialement lors de l'actualisation, mais lorsque la méthode de rechargement semble recharger la page sans définir l'onglet, vous ne savez pas quel est le problème.$route
au contrôleur pour que cela fonctionne.angular.js file
. Si vous continuez à utiliser,$routeProvider
vous devrez maintenant inclureangular-route.js
dans votre code HTML:$route.reload()
va réinitialiser les contrôleurs mais pas les services. Si vous souhaitez réinitialiser l'ensemble de l'état de votre application, vous pouvez utiliser:Il s'agit d'une méthode DOM standard à laquelle vous pouvez accéder en injectant le service $ window .
Si vous voulez être sûr de recharger la page à partir du serveur, par exemple lorsque vous utilisez Django ou un autre framework web et que vous voulez un nouveau rendu côté serveur, passez
true
en paramètre àreload
, comme expliqué dans la documentation . Comme cela nécessite une interaction avec le serveur, il sera plus lent, alors ne le faites que si nécessaireAngulaire 2
Ce qui précède s'applique à Angular 1. Je n'utilise pas Angular 2, il semble que les services soient différents là-bas, il y
Router
en aLocation
, et leDOCUMENT
. Je n'y ai pas testé différents comportementsla source
Pour recharger la page d'un chemin d'itinéraire donné: -
la source
Si vous utilisez un routeur ui angulaire, ce sera la meilleure solution.
la source
Eh bien peut-être avez-vous oublié d'ajouter "$ route" lors de la déclaration des dépendances de votre Controller:
la source
Juste pour tout recharger, utilisez window.location.reload (); avec angularjs
Consultez l'exemple de travail
HTML
angularJS
http://jsfiddle.net/HB7LU/22324/
la source
Si vous souhaitez actualiser le contrôleur tout en actualisant les services que vous utilisez, vous pouvez utiliser cette solution:
c'est à dire
Cela actualisera le contrôleur et le HTML, vous pouvez aussi l'appeler Actualiser ou Rendre à nouveau .
la source
Avant Angular 2 (AngularJs)
Par route
Si vous voulez recharger toute l'application
Angulaire 2+
Ou
la source
La solution la plus simple que je pensais était,
ajoutez '/' à la route qui veut être rechargée à chaque fois en revenant.
par exemple:
au lieu des suivants
utilisation,
la source
/
: O Mon itinéraire ressemble maintenant à ceci://
Essayez l'une des solutions suivantes:
la source
J'ai obtenu ce code de travail pour supprimer le cache et recharger la page
Vue
Manette
Injecteurs: $ scope, $ state, $ stateParams, $ templateCache
la source
Utilisez le code suivant sans notification de rechargement intime à l'utilisateur. Il rendra la page
la source
J'ai eu un combat acharné avec ce problème pendant des mois, et la seule solution qui a fonctionné pour moi est la suivante:
la source
$window.location.reload()
que le PO mentionne spécifiquement ne fonctionne pas correctement dans son cas.