javascript - версии - ng-attr-title
Как перезагрузить или повторно отобразить всю страницу с помощью функции AngularJS (9)
После рендеринга всей страницы на основе нескольких пользовательских контекстов и создания нескольких запросов $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())
тоже не работает (ничего не происходит).
Есть ли другой способ повторно отобразить страницу без повторного ввода всех запросов вручную?
Возможно, вы забыли добавить «$ route» при объявлении зависимостей вашего контроллера:
app.controller('NameCtrl', ['$scope','$route', function($scope,$route) {
// $route.reload(); Then this should work fine.
}]);
Для записи, чтобы заставить углы повторно отобразить текущую страницу, вы можете использовать:
$route.reload();
Согласно documentation AngularJS:
Заставляет $ route service перезагружать текущий маршрут, даже если $ location не изменилось.
В результате, ngView создает новую область, восстанавливает контроллер.
Если вы используете угловой ui-router, это будет наилучшим решением.
$scope.myLoadingFunction = function() {
$state.reload();
};
Если вы хотите обновить контроллер при обновлении любых сервисов, которые вы используете, вы можете использовать это решение:
- Вложение $ state
т.е.
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, а также вы можете вызвать его Refresh или Re-Render .
Попробуйте следующее:
$route.reload(); // don't forget to inject $route in your controller
$window.location.reload();
location.reload();
Самое простое решение, которое я понял,
добавьте '/' на маршрут, который нужно перезагружать каждый раз при возвращении.
например:
вместо следующего
$routeProvider
.when('/About', {
templateUrl: 'about.html',
controller: 'AboutCtrl'
})
использовать,
$routeProvider
.when('/About/', { //notice the '/' at the end
templateUrl: 'about.html',
controller: 'AboutCtrl'
})
Я много лет боролся с этой проблемой, и единственным решением, которое сработало для меня, является следующее:
var landingUrl = "http://www.ytopic.es"; //URL complete
$window.location.href = landingUrl;
Я получил этот рабочий код для удаления кеша и перезагрузки страницы
Посмотреть
<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 });
};
Перед 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();
}