После рендеринга всей страницы, основанной на нескольких пользовательских контекстах и сделав несколько $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)
, ожидающие ответа, отменяются, поэтому я не могу это использовать. Кроме того, взлом $location.path($location.path())
не работает (ничего не происходит).
Есть ли другой способ перерисовки страницы без повторной отправки всех запросов вручную?
Ответы:
Для записи, чтобы заставить angular рендерить текущую страницу, вы можете использовать:
Согласно документации AngularJS :
источник
$route.reload()
по сравнению с обычным обновлением. Например, вкладка установлена на первоначальное отображение при обновлении, но когда кажется, что метод перезагрузки перезагружает страницу без настройки вкладки, не знаете, в чем проблема.$route
в контроллер, чтобы это работало.angular.js file
. Если вы продолжаете использовать$routeProvider
, теперь вам нужно будет включитьangular-route.js
в свой HTML:$route.reload()
будет повторно инициализировать контроллеры, но не сервисы. Если вы хотите сбросить все состояние вашего приложения, вы можете использовать:Это стандартный метод DOM, к которому вы можете получить доступ, внедрив службу $ window .
Если вы хотите обязательно перезагрузить страницу с сервера, например, когда вы используете Django или другой веб-фреймворк и вам нужен новый рендеринг на стороне сервера, передайте
true
в качестве параметраreload
, как описано в документации . Поскольку это требует взаимодействия с сервером, это будет медленнее, поэтому делайте это только при необходимостиУгловой 2
Вышесказанное относится к угловому 1. Я не использую Угловые 2, выглядит как услуги различны, там есть
Router
,Location
иDOCUMENT
. Я не тестировал там другое поведениеисточник
Для перезагрузки страницы для заданного пути маршрута: -
источник
Если вы используете угловой UI-маршрутизатор, это будет лучшим решением.
источник
Ну, может быть, вы забыли добавить «$ route» при объявлении зависимостей вашего контроллера:
источник
Просто, чтобы перезагрузить все, используйте window.location.reload (); с angularjs
Проверьте рабочий пример
HTML
angularJS
http://jsfiddle.net/HB7LU/22324/
источник
Если вы хотите обновить контроллер при обновлении любых служб, которые вы используете, вы можете использовать это решение:
т.е.
Это обновит контроллер и HTML, а также вы можете назвать его Refresh или Re-Render .
источник
До Angular 2 (AngularJs)
Через маршрут
Если вы хотите перезагрузить все приложение
Угловой 2+
Или
источник
Самое простое решение, которое я понял, было:
добавьте '/' к маршруту, который хотите загружать каждый раз при возвращении.
например:
вместо следующего
использование,
источник
/
: O Мой маршрут теперь выглядит следующим образом://
Попробуйте одно из следующего:
источник
Я получил этот рабочий код для удаления кеша и перезагрузки страницы
Посмотреть
контроллер
Инжекторы: $ scope, $ state, $ stateParams, $ templateCache
источник
Используйте следующий код без уведомления пользователя о перезагрузке. Это сделает страницу
источник
У меня была тяжелая борьба с этой проблемой в течение нескольких месяцев, и единственное решение, которое сработало для меня, это:
источник
$window.location.reload()
что, как конкретно упоминает ФП, не работает должным образом в его случае.