<a ng-href="#" class="navbar-brand" title="home" data-translate>PORTAL_NAME</a>
Je veux recharger la page. Comment puis-je faire ceci?
Vous pouvez utiliser la méthode reload
du service $route
. Injectez $route
dans votre contrôleur, puis créez une méthode reloadRoute
sur votre $scope
.
$scope.reloadRoute = function() {
$route.reload();
}
Ensuite, vous pouvez l'utiliser sur le lien comme ceci:
<a ng-click="reloadRoute()" class="navbar-brand" title="home" data-translate>PORTAL_NAME</a>
Cette méthode entraînera le rechargement de la route actuelle. Toutefois, si vous souhaitez effectuer une actualisation complète, vous pouvez injecter $window
et l’utiliser:
$scope.reloadRoute = function() {
$window.location.reload();
}
Éditer plus tard (routeur ui):
Comme mentionné par JamesEddyEdwards et Dunc dans leurs réponses, si vous utilisez angular-ui/ui-router , vous pouvez utiliser la méthode suivante pour recharger l’état/la route en cours. Il suffit d’injecter $state
au lieu de $route
et vous obtenez:
$scope.reloadRoute = function() {
$state.reload();
};
L'objet window
est rendu disponible par le biais du service $window
pour tests et simulations plus simples , vous pouvez choisir entre:
$scope.reloadPage = function(){$window.location.reload();}
Et :
<a ng-click="reloadPage" class="navbar-brand" title="home" data-translate>PORTAL_NAME</a>
En remarque, je ne pense pas que $ route.reload () recharge la page, mais niquement la route .
location.reload();
Fait le tour.
<a ng-click="reload()">
$scope.reload = function()
{
location.reload();
}
Pas besoin de routes ou quoi que ce soit tout simplement vieux js
Semblable à la réponse d'Alexandrin, mais en utilisant $ state plutôt que $ route:
(De SO de JimTheDev _ réponse ici .)
$scope.reloadState = function() {
$state.go($state.current, {}, {reload: true});
}
<a ng-click="reloadState()" ...
Si vous utilisez des angulaires plus avancées i-router que je vous recommanderais sans hésiter, vous pouvez maintenant simplement utiliser:
$state.reload();
Ce qui fait essentiellement la même chose que la réponse de Dunc.
Ma solution pour éviter la boucle infinie était de créer un autre état ayant effectué la redirection:
$stateProvider.state('app.admin.main', {
url: '/admin/main',
authenticate: 'admin',
controller: ($state, $window) => {
$state.go('app.admin.overview').then(() => {
$window.location.reload();
});
}
});
Il est assez facile de simplement utiliser $route.reload()
(n'oubliez pas d'injecter $ route dans votre contrôleur), mais à partir de votre exemple, vous pouvez simplement utiliser "href" au lieu de "ng-href":
<a href="" class="navbar-brand" title="home" data-translate>PORTAL_NAME</a>
Vous devez uniquement utiliser ng-href pour protéger l'utilisateur des liens non valides générés par un clic avant que Angular ne remplace le contenu des balises {{}}.
Sur Angular 1.5 - après avoir essayé certaines des solutions ci-dessus, voulant ne recharger que les données sans actualisation complète de la page, des problèmes se sont posés lors du chargement des données. J'ai remarqué cependant que lorsque je vais sur une autre route puis que je reviens sur le courant, tout fonctionne correctement, mais lorsque je veux recharger uniquement la route actuelle à l'aide de $route.reload()
, une partie du code n'est pas exécutée correctement. . Ensuite, j'ai essayé de rediriger vers l'itinéraire actuel de la manière suivante:
$scope.someFuncName = function () {
//go to another route
$location.path('/another-route');
};
et dans la configuration du module, ajoutez un autre when
:
.config(['$routeProvider', function($routeProvider) {
$routeProvider.when('/first-page', {
templateUrl: '/first-template',
controller: 'SomeCtrl'
}).when('/another-route', {//this is the new "when"
redirectTo: '/first-page'
});
}])
et cela fonctionne très bien pour moi. Il n'actualise pas la page entière, mais provoque uniquement le rechargement du contrôleur et du modèle actuels. Je sais que c'est un peu hacky, mais c'était la seule solution que j'ai trouvée.
<a title="Pending Employee Approvals" href="" ng-click="viewPendingApprovals(1)">
<i class="fa fa-user" aria-hidden="true"></i>
<span class="button_badge">{{pendingEmployeeApprovalCount}}</span>
</a>
et dans le contrôleur
$scope.viewPendingApprovals = function(type) {
if (window.location.hash.substring(window.location.hash.lastIndexOf('/') + 1, window.location.hash.length) == type) {
location.reload();
} else {
$state.go("home.pendingApproval", { id: sessionStorage.typeToLoad });
}
};
et dans le fichier de route
.state('home.pendingApproval', {
url: '/pendingApproval/:id',
templateUrl: 'app/components/approvals/pendingApprovalList.html',
controller: 'pendingApprovalListController'
})
Donc, si l'identifiant passé dans l'URL est le même que ce qui provient de la fonction appelée en cliquant sur l'ancre, rechargez simplement, sinon suivez l'itinéraire demandé.
Aidez-moi à améliorer cette réponse, si cela peut vous aider. Toutes les suggestions sont les bienvenues.
angulaire 2 +
J'ai trouvé ceci en cherchant Angular 2+, alors voici le chemin:
window.location.reload();