<a ng-href="#" class="navbar-brand" title="home" data-translate>PORTAL_NAME</a>
Quero recarregar a página. Como posso fazer isso?
<a ng-href="#" class="navbar-brand" title="home" data-translate>PORTAL_NAME</a>
Quero recarregar a página. Como posso fazer isso?
Respostas:
Você pode usar o reload
método do $route
serviço. Injete $route
no seu controlador e crie um método reloadRoute
no seu $scope
.
$scope.reloadRoute = function() {
$route.reload();
}
Então você pode usá-lo no link como este:
<a ng-click="reloadRoute()" class="navbar-brand" title="home" data-translate>PORTAL_NAME</a>
Este método fará com que a rota atual seja recarregada. Se, no entanto, você deseja executar uma atualização completa, você pode injetar $window
e usar isso:
$scope.reloadRoute = function() {
$window.location.reload();
}
Edição posterior (ui-router):
Conforme mencionado por JamesEddyEdwards e Dunc nas respostas, se você estiver usando o angular-ui / ui-router, poderá usar o seguinte método para recarregar o estado / rota atual. Basta injetar em $state
vez de $route
e então você tem:
$scope.reloadRoute = function() {
$state.reload();
};
window
Se o objeto for disponibilizado por meio do $window
serviço para testes e zombarias mais fáceis , você pode optar por algo como:
$scope.reloadPage = function(){$window.location.reload();}
E:
<a ng-click="reloadPage" class="navbar-brand" title="home" data-translate>PORTAL_NAME</a>
Como observação, acho que o $ route.reload () realmente recarrega a página, mas apenas a rota .
$window
vez de window
.
$window
docs , principalmente, é porque reloadPage
seria (melhor) testável quando se usa $window
.
location.reload();
Faz o truque.
<a ng-click="reload()">
$scope.reload = function()
{
location.reload();
}
Não há necessidade de rotas ou qualquer coisa apenas js velhos simples
Se estiver usando o ui-router mais avançado da Angulars que eu recomendaria definitivamente, agora você pode simplesmente usar:
$state.reload();
O que é essencialmente o mesmo que a resposta de Dunc.
Minha solução para evitar o loop infinito foi criar outro estado que fez o redirecionamento:
$stateProvider.state('app.admin.main', {
url: '/admin/main',
authenticate: 'admin',
controller: ($state, $window) => {
$state.go('app.admin.overview').then(() => {
$window.location.reload();
});
}
});
Angular 2+
Eu encontrei isso enquanto procurava pelo Angular 2+, então aqui está o caminho:
$window.location.reload();
É fácil de usar $route.reload()
(não se esqueça de injetar $ route no seu controlador), mas a partir do seu exemplo, você pode usar "href" em vez de "ng-href":
<a href="" class="navbar-brand" title="home" data-translate>PORTAL_NAME</a>
Você só precisa usar ng-href para proteger o usuário de links inválidos causados por eles clicarem antes que o Angular substitua o conteúdo das tags {{}}.
No Angular 1.5 - depois de tentar algumas das soluções acima que desejavam recarregar apenas os dados sem atualização de página inteira, tive problemas ao carregar os dados corretamente. Notei, porém, que quando vou para outra rota e volto à atual, tudo funciona bem, mas quando quero recarregar a rota atual usando apenas $route.reload()
parte do código não é executado corretamente. Depois, tentei redirecionar para a rota atual da seguinte maneira:
$scope.someFuncName = function () {
//go to another route
$location.path('/another-route');
};
e na configuração do módulo, adicione outro 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'
});
}])
e funciona muito bem para mim. Ele não atualiza a página inteira, mas apenas faz com que o controlador e o modelo atuais sejam recarregados. Eu sei que é um pouco hacky, mas essa foi a única solução que encontrei.
var reload = $location.url(); $location.url(''); $timeout(function() { $location.url(reload); });
; não há necessidade de criar rotas aleatórias. Mas seria interessante ver qual código não é reavaliado para você. Parece que redirectTo
as resolve
funções par e reexecutam normalmente$route.reload()
(veja os console.log).
<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>
e no controlador
$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 });
}
};
e no arquivo de rota
.state('home.pendingApproval', {
url: '/pendingApproval/:id',
templateUrl: 'app/components/approvals/pendingApprovalList.html',
controller: 'pendingApprovalListController'
})
Portanto, se o ID passado na URL for o mesmo que vem da função chamada clicando na âncora, basta recarregar, ou seguir a rota solicitada.
Por favor, ajude-me a melhorar esta resposta, se isso for útil. Qualquer sugestão é bem vinda.
Isso pode ser feito chamando o método reload () em JavaScript.
location.reload();