Как перезагрузить или повторно отобразить всю страницу с помощью 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) которые ждут ответа, отменяются, поэтому я не могу использовать это. Кроме того, Хак $location.path($location.path()) не работает либо (ничего не происходит).
есть ли другой способ повторно отобразить страницу, не выдавая вручную все запросы снова?
12 ответов:
для записи, чтобы заставить angular повторно отобразить текущую страницу, вы можете использовать:
$route.reload();согласно AngularJS документация:
вызывает $route service для перезагрузки текущего маршрута, даже если $location не изменился.
в результате этого, ngView создает новую область, восстанавливает контроллер.
$route.reload()будет повторно инициализировать контроллеры, но не Службы. Если вы хотите сбросить все состояние вашего приложения, вы можете использовать:$window.location.reload();это стандартный метод DOM что вы можете получить доступ к впрыскивать $ window сервис.
если вы хотите обязательно перезагрузить страницу с сервера, например, когда вы используете Django или другой веб-фреймворк, и вам нужен свежий рендер на стороне сервера, передайте
trueв качестве параметра кreload, как пояснил документы. Поскольку для этого требуется взаимодействие с сервером, оно будет медленнее, поэтому делайте это только при необходимостиУгловое 2
вышеизложенное относится к угловому 1. Я не использую Angular 2, похоже, что услуги там разные, есть
Router,LocationиDOCUMENT. Я не тестировал там разные модели поведения
для перезагрузки страницы для заданного пути маршрута: -
$location.path('/path1/path2'); $route.reload();
Если вы используете угловой пользовательского интерфейса маршрутизатора это будет лучшим решением.
$scope.myLoadingFunction = function() { $state.reload(); };
Ну, может быть, вы забыли добавить "$route " при объявлении зависимостей вашего контроллера:
app.controller('NameCtrl', ['$scope','$route', function($scope,$route) { // $route.reload(); Then this should work fine. }]);
просто, чтобы перезагрузить все , окне использовать.местоположение.reload (); с angularjs
проверить рабочий пример
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();} }
самое простое решение, которое я понял, было,
добавить ' / ' к маршруту, который нужно перезагружать каждый раз при возвращении.
например:
вместо следующее
$routeProvider .when('/About', { templateUrl: 'about.html', controller: 'AboutCtrl' })использовать
$routeProvider .when('/About/', { //notice the '/' at the end templateUrl: 'about.html', controller: 'AboutCtrl' })
Если вы хотите обновить контроллер во время обновления любых служб, которые вы используете, вы можете использовать это решение:
- Inject $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, а также вы можете назвать его обновить или рендерить.
Перед 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(); }
Я получил этот рабочий код для удаления кэша и перезагрузки страницы
посмотреть
<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 }); };
используйте следующий код без уведомления об интимной перезагрузке для пользователя. Он будет отображать страницу
var currentPageTemplate = $route.current.templateUrl; $templateCache.remove(currentPageTemplate); $window.location.reload();
У меня была тяжелая борьба с этой проблемой в течение нескольких месяцев, и единственное решение, которое сработало для меня, это:
var landingUrl = "http://www.ytopic.es"; //URL complete $window.location.href = landingUrl;
Comments