Depois de renderizar a página inteira com base em vários contextos do usuário e fazer várias $http
solicitações, desejo que o usuário possa alternar contextos e renderizar tudo novamente (reenviar todas as $http
solicitações, etc.). Se eu apenas redirecionar o usuário para outro lugar, as coisas funcionarão corretamente:
$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);
};
Se eu usar $window.location.reload()
, algumas $http
solicitações auth.impersonate(username)
que estão aguardando uma resposta serão canceladas, então não posso usá-la. Além disso, o hack $location.path($location.path())
também não funciona (nada acontece).
Existe outra maneira de renderizar novamente a página sem emitir manualmente todas as solicitações novamente?
Respostas:
Para o registro, para forçar o angular a renderizar novamente a página atual, você pode usar:
De acordo com a documentação do AngularJS :
fonte
$route.reload()
comparado a uma atualização normal. Por exemplo, uma guia está configurada para ser exibida inicialmente na atualização, mas quando o método recarregar parece recarregar a página sem definir a guia, não sabe ao certo qual é o problema.$route
no controlador para que isso funcione.angular.js file
. Se você continuar usando$routeProvider
, agora precisará incluirangular-route.js
no seu HTML:$route.reload()
reinicializará os controladores, mas não os serviços. Se você deseja redefinir todo o estado do seu aplicativo, pode usar:Este é um método DOM padrão que você pode acessar injetando o serviço $ window .
Se você quiser recarregar a página do servidor, por exemplo, quando estiver usando o Django ou outra estrutura da web e desejar uma nova renderização do lado do servidor, passe
true
como um parâmetro parareload
, conforme explicado nos documentos . Como isso requer interação com o servidor, será mais lento, se necessário.Angular 2
O acima se aplica a Angular 1. Eu não estou usando angular 2, parece que os serviços são diferentes lá, não é
Router
,Location
e oDOCUMENT
. Eu não testei comportamentos diferentes láfonte
Para recarregar a página para um determinado caminho de rota: -
fonte
Se você estiver usando um ui-router angular, esta será a melhor solução.
fonte
Bem, talvez você tenha esquecido de adicionar "$ route" ao declarar as dependências do seu Controller:
fonte
Apenas para recarregar tudo, use window.location.reload (); com angularjs
Confira o exemplo de trabalho
HTML
angularJS
http://jsfiddle.net/HB7LU/22324/
fonte
Se você deseja atualizar o controlador enquanto atualiza quaisquer serviços que estiver usando, você pode usar esta solução:
ie
Isso atualizará o controlador e o HTML também. Você pode chamá-lo de Atualizar ou Renderizar novamente .
fonte
Antes do Angular 2 (AngularJs)
Através da rota
Se você deseja recarregar todo o aplicativo
Angular 2+
Ou
fonte
A solução mais fácil que imaginei foi:
adicione '/' à rota que deseja ser recarregada sempre que voltar.
por exemplo:
em vez do seguinte
usar,
fonte
/
: O Minha rota agora fica assim://
Tente um dos seguintes:
fonte
Eu recebi este código de trabalho para remover o cache e recarregar a página
Visão
Controlador
Injetores: $ scope, $ state, $ stateParams, $ templateCache
fonte
Use o código a seguir sem notificação de recarga íntima para o usuário. Vai renderizar a página
fonte
Eu tenho uma luta difícil com esse problema há meses, e a única solução que funcionou para mim é esta:
fonte
$window.location.reload()
que o que o OP menciona especificamente não funciona adequadamente no caso dele.