Как перезагрузить или повторно отобразить всю страницу с помощью функции AngularJS
После рендеринга всей страницы на основе нескольких пользовательских контекстов и создания нескольких запросов $http
я хочу, чтобы пользователь мог снова переключать контексты и повторно отображать все (пересылать все запросы $http
и т.д.). Если я просто перенаправляю пользователя в другое место, все работает правильно:
$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);
};
Если я использую $window.location.reload()
, то некоторые из запросов $http
на auth.impersonate(username)
, которые ждут ответа, будут отменены, поэтому я не могу использовать это. Кроме того, hack $location.path($location.path())
тоже не работает (ничего не происходит).
Есть ли другой способ повторной рендеринга страницы без повторного запроса всех запросов еще раз?
Ответы
Ответ 1
Для записи, чтобы заставить angular повторно отобразить текущую страницу, вы можете использовать:
$route.reload();
В соответствии с AngularJS документация:
Заставляет $route service перезагружать текущий маршрут, даже если $location не изменилось.
В результате этого ngView создает новую область действия, восстанавливает контроллер.
Ответ 2
$route.reload()
будет повторно инициализировать контроллеры, но не сервисы. Если вы хотите reset указать все состояние своего приложения, вы можете использовать:
$window.location.reload();
Это стандартный метод DOM, с помощью которого вы можете получить доступ к службе $window.
Если вы хотите, чтобы вы перезагрузили страницу с сервера, например, когда вы используете Django или другую веб-фреймворк, и хотите визуализировать новую серверную сторону, передайте true
в качестве параметра reload
, так как объясняется в документах. Поскольку для этого требуется взаимодействие с сервером, оно будет медленнее, поэтому при необходимости
Angular 2
Вышеупомянутое относится к Angular 1. Я не использую Angular 2, похоже, что там разные службы, есть Router
, Location
и DOCUMENT
. Я не тестировал различные варианты поведения там
Ответ 3
Для перезагрузки страницы для заданного маршрута маршрута: -
$location.path('/path1/path2');
$route.reload();
Ответ 4
Если вы используете angular ui-router, это будет лучшее решение.
$scope.myLoadingFunction = function() {
$state.reload();
};
Ответ 5
Возможно, вы забыли добавить "$ route" при объявлении зависимостей вашего контроллера:
app.controller('NameCtrl', ['$scope','$route', function($scope,$route) {
// $route.reload(); Then this should work fine.
}]);
Ответ 6
Чтобы перезагрузить все, используйте window.location.reload(); с угловыми значениями
Проверьте рабочий пример
HTML
<div ng-controller="MyCtrl">
<button ng-click="reloadPage();">Reset</button>
</div>
angularJS
var myApp = angular.module('myApp',[]);
function MyCtrl($scope) {
$scope.reloadPage = function(){window.location.reload();}
}
http://jsfiddle.net/HB7LU/22324/
Ответ 7
Самое простое решение, которое я понял, было
добавьте '/' к маршруту, который нужно перезагружать каждый раз при возврате.
например:
вместо следующего
$routeProvider
.when('/About', {
templateUrl: 'about.html',
controller: 'AboutCtrl'
})
использование
$routeProvider
.when('/About/', { //notice the '/' at the end
templateUrl: 'about.html',
controller: 'AboutCtrl'
})
Ответ 8
Если вы хотите обновить контроллер при обновлении любых служб, которые вы используете, вы можете использовать это решение:
то есть.
app.controller('myCtrl',['$scope','MyService','$state', function($scope,MyService,$state) {
//At the point where you want to refresh the controller including MyServices
$state.reload();
//OR:
$state.go($state.current, {}, {reload: true});
}
Это обновит контроллер и HTML, а также вы можете назвать его Обновить или повторно рендерить.
Ответ 9
Перед Angular 2 (AngularJs)
Через маршрут
$route.reload();
Если вы хотите перезагрузить все приложение
$window.location.reload();
Угловой 2+
import { Location } from '@angular/common';
constructor(private location: Location) {}
ngOnInit() { }
load() {
this.location.reload()
}
Или же
constructor(private location: Location) {}
ngOnInit() { }
Methods (){
this.ngOnInit();
}
Ответ 10
Используйте следующий код без интимного уведомления о перезагрузке для пользователя. Он отобразит страницу
var currentPageTemplate = $route.current.templateUrl;
$templateCache.remove(currentPageTemplate);
$window.location.reload();
Ответ 11
Я получил этот рабочий код для удаления кеша и перезагрузки страницы
Просмотр
<a class="btn" ng-click="reload()">
<i class="icon-reload"></i>
</a>
контроллер
Инъекторы: $scope, $state, $stateParams, $templateCache
$scope.reload = function() { // To Reload anypage
$templateCache.removeAll();
$state.transitionTo($state.current, $stateParams, { reload: true, inherit: true, notify: true });
};
Ответ 12
Попробуйте выполнить одно из следующих действий:
$route.reload(); // don't forget to inject $route in your controller
$window.location.reload();
location.reload();
Ответ 13
У меня был тяжелый бой с этой проблемой в течение нескольких месяцев, и единственным решением, которое сработало для меня, является следующее:
var landingUrl = "http://www.ytopic.es"; //URL complete
$window.location.href = landingUrl;