Как перезагрузить или повторно отобразить всю страницу с помощью функции 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

Если вы хотите обновить контроллер при обновлении любых служб, которые вы используете, вы можете использовать это решение:

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

Ответ 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;