Как перезагрузить или повторно отобразить всю страницу с помощью 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 или другой веб-фреймворк, и вы хотите свежий серверный рендеринг, pass true в качестве параметра к reload, как пояснил документы. Поскольку для этого требуется взаимодействие с сервером, оно будет медленнее, поэтому делайте это только при необходимости

Угловое 2

вышесказанное относится к Angular 1. Я не использую Angular 2, похоже, что услуги там разные, есть Router, Location и DOCUMENT. Я не тестировал там разные модели поведения


для перезагрузки страницы для заданного пути маршрута: -

$location.path('/path1/path2');
$route.reload();

Если вы используете угловой ui-маршрутизатор это будет лучшим решением.

$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();}
}

http://jsfiddle.net/HB7LU/22324/


простое решение я понял,

добавьте " / " к маршруту, который нужно перезагружать каждый раз при возвращении.

например:

вместо следующее

$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, а также вы можете назвать его обновить или повторно отобразить.


Перед Угловым 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;