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



есть ли другой способ повторно отобразить страницу, не выдавая вручную все запросы снова?

666   12  

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

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

Перед 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

    Ничего не найдено.