Як перазагрузіць або паўторна візуалізаваць ўсю старонку з дапамогай 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 (імя карыстальніка) , якія чакаюць для адказу адменены, таму я не магу выкарыстоўваць. Акрамя таго, хак $ location.path ($ location.path ()) не працуе, альбо (нічога не адбываецца).

Ёсць яшчэ адзін спосаб, каб паўторна адлюстраваць старонку без ручных выдачаў усіх запытаў зноў?

281
Магчымы дублікат AngularJs: Абнавіць старонку
дададзена аўтар Alena Kastsiukavets, крыніца
Як Альвара Joao кажа ніжэй, вы павінны выкарыстоўваць вуглавыя-route.js для таго, каб атрымаць гэтую працу. bennadel.com/blog/…
дададзена аўтар Yvonne Aburrow, крыніца

12 адказы

Для запісу, каб прымусіць кутні паўторнай візуалізацыі бягучай старонкі, вы можаце выкарыстаць:

$route.reload();

According to AngularJS documentation:

<�Р> Прычыны абслугоўвання $ маршрутных перазагрузіць бягучы маршрут, нават калі $ месцазнаходжанне не змянілася.      <�Р> У выніку гэтага, ngView стварае новую вобласць, reinstantiates кантролер. </Р>
389
дададзена
Дзякуй за каментар, па нейкай прычыне, я, здаецца, каб атрымаць крыху іншае паводзіны, калі я выкарыстоўваю $ route.reload() у параўнанні з нармальным абнаўленнем. Напрыклад, ўкладка усталёўваецца, каб паказаць спачатку на абнаўлення, але калі метад перазагрузкі здаецца, каб перазагрузіць старонку без ўстаноўкі ўкладкі, не ўпэўнены, што праблема ёсць.
дададзена аўтар Doug Molineux, крыніца
робіць гэта перазарадка таксама выклікаць анімацыю як НГ ўвесці?
дададзена аўтар testiguy, крыніца
@alphapilgrim Модуль ngRoute больш не частка ядра angular.js файл . Калі вы працягваеце выкарыстоўваць $ routeProvider , то вы зараз павінны ўключаць кутні route.js у HTML:
дададзена аўтар Alvaro Joao, крыніца
@andersonvom гэта дало мне наступную памылку, Невядомы пастаўшчык: $ routeProvider <- $ маршрут
дададзена аўтар alphapilgrim, крыніца
Не забывайце ўводзіць $ маршрутнай у кантролер для гэтай працы.
дададзена аўтар Neel, крыніца
Ці можна перазагрузіць канкрэтны кантролер, які не на фактычнай пункту гледжання ці стан?
дададзена аўтар mautrok, крыніца
$ State.reload (), калі вы выкарыстоўваеце stateProvider
дададзена аўтар Lalit Rao, крыніца
Ці азначае гэта прагонаў фільтры/паслугі, а? Атрыманне непажаданага пастаяннага стану. Edit: Яшчэ upvoted для адказу на пытанне правільна і гэта супер карысна. Дзякуй
дададзена аўтар grant, крыніца
Як я ўжо казаў у каментарах ніжэй, вы павінны захоўваць дадзеныя ў кантролерах і/або толькі лакальным сховішча. Ўпарта дадзеныя ў іншым месцы, як вы заўважылі, прыводзіць да гэтых прыкрай памылак цяжка выправіць. Гэта адбываецца таму, што
дададзена аўтар andersonvom, крыніца
любы спосаб, каб выклікаць гэты инлайн з кнопкай?
дададзена аўтар JL Griffin, крыніца

$route.reload() will reinitialise the controllers but not the services. If you want to reset the whole state of your application you can use:

$window.location.reload();

This is a standard DOM method which you can access injecting the $window service.

Калі вы хочаце быць упэўнены, каб перазагрузіць старонку з сервера, напрыклад, калі вы выкарыстоўваеце Django ці іншай вэб-фреймворк, і вы хочаце свежы боку сервера візуалізацыі, перадаць True у якасці параметру перазагрузка , як апісана ў раздзеле дакументах . Так што патрабуе ўзаемадзеяння з серверам, ён будзе павольней, так што гэта толькі ў выпадку неабходнасці

кутні 2

The above applies to Angular 1. I am not using кутні 2, looks like the services are different there, there is Router, Location, and the DOCUMENT. I did not test different behaviors there

301
дададзена
@danza <�я> Дзе адзін павінен захоўваць дадзеныя ў кэшы? ... мадэль аб'екта? Howver Кутні зрабіў жудасную працу наймення сваіх выбаршчыкаў MVCS. Я трымаю ін'екцыйныя аб'екты мадэлі праз module.value API. Тады розныя інтэрфейсы я вызначыў на службе НГ, якія змяняюць працу мадэлі аб'екта больш як каманда.
дададзена аўтар jusopi, крыніца
Дзякуй! Я толькі што дадалі функцыю, якая выводзіць паведамленне ў ionCube24 UI для зарэгістраваных карыстальнікаў, калі мы толькі што выкарыстоўвалі абнаўлення і іх код UI цяпер ззаду і мае патрэбу ў асвяжальны; выклікаецца з функцыі на каранёвай вобласці бачнасці, гэта працуе ласунак, каб дазволіць карыстачу ініцыяваць абнаўленне і перазагрузку прыкладання.
дададзена аўтар Nick, крыніца
@danza, $ маршрут з'яўляецца часткай ng.route.IRouteService ??
дададзена аўтар cracker, крыніца
проста JS метад window.location.reload() без $ працуе для мяне.
дададзена аўтар Pranav Singh, крыніца
Але гэта не будзе перарабляць шаблон рэндэрынг ў Django або іншыя структуры, як Node.js
дададзена аўтар Aminah Nuraini, крыніца
@Danza, аказваецца, што гэта, падобна, не засавить, паколькі API базы дадзеных займае трохі больш часу, каб абнавіць, але я ўжо перазагрузіць. Яна была вырашана шляхам памяшкання перазагрузкі внутри'then() '
дададзена аўтар Aminah Nuraini, крыніца
Я паспрабаваў гэта, але гэта вырабляла некаторыя пытанні, я зрабіў сваю задачу з іншых method.Thanks
дададзена аўтар Anuj, крыніца
што ngRoute. $ route.reload() патрабуецца якая-небудзь залежнасць таксама?
дададзена аўтар Anuj, крыніца
@AminahNuraini, які павінен працаваць, перадаючы параметр ў перагрузачнай . Я рэдагаваў адказ, каб уключыць што
дададзена аўтар danza, крыніца
@AnujGupta ды, відавочна,
дададзена аўтар danza, крыніца
@cracker ngRoute. $ route.reload() у Кутняе 1,5
дададзена аўтар danza, крыніца
Вядома, гэта будзе працаваць, але гэта не з'яўляецца добрай практыкай. См дакументацыі каля $ аконнага , прычына яго выкарыстання тлумачыцца ў пачатак: <�я> у той час як акно глабальна даступны ў JavaScript, гэта выклікае праблемы тэстоўваную, таму што гэта глабальная пераменная. У кутні мы заўсёды ставяцца да яго з дапамогай сэрвісу $ вокны, так што гэта можа быць адменена, выдаленыя або здзекаваліся для тэставання
дададзена аўтар danza, крыніца
Хто гэта кажа? Дзе адзін павінен захоўваць дадзеныя ў кэшы?
дададзена аўтар danza, крыніца
Я наткнуўся на шмат і шмат памылак з-за дадзеныя, якія захоўваюцца ў службах, што робіць іх стан, а не асобы без грамадзянства. Калі мы не гаворым пра службу кэшавання (у гэтым выпадку, будзе інтэрфейс, каб змыць яго), я хацеў бы захаваць дадзеныя з службаў і кантролераў. Напрыклад, можна было б захоўваць дадзеныя ў LocalStorage і выкарыстоўваць паслугу для доступу да яго. Гэта вызваліць сэрвіс ад захоўвання дадзеных непасрэдна ў ёй.
дададзена аўтар andersonvom, крыніца
Варта адзначыць, што адзін не варта захоўваць стан у службах так ці інакш маюць патрэбу ў паслугах, якія будуць «перазапускацца».
дададзена аўтар andersonvom, крыніца
Гэта мой сябар, выратаваў мой дзень
дададзена аўтар Luis Sieira, крыніца

Для перазагрузкі старонкі для зададзенага шляху маршруту: -

$location.path('/path1/path2');
$route.reload();
37
дададзена
Не ведаю чаму, але метад .reload (), здаецца, не працуе тут. Ён нічога не realod.
дададзена аўтар mircobabini, крыніца

Калі вы карыстаецеся <�моцны> Вуглавая UI-маршрутызатар гэта будзе лепшым рашэннем.

$scope.myLoadingFunction = function() {
    $state.reload();
};
28
дададзена
У маім праекце Cli пасля разгортвання агульнай хостынгу. Калі я перагрузачных мой праект яго падачы 404 памылкі для вырашэння гэтай праблемы выкарыстоўваюць. Калі я дадаць «выкарыстаць хэш», то ён працуе з «#», але я не хачу гэтага, ёсць спосаб, якім гэта можа быць вырашана.
дададзена аўтар T. Shashwat, крыніца

Ну, можа быць, вы забыліся дадаць «$ маршрут» пры аб'яўленні залежнасцяў вашага кантролера:

app.controller('NameCtrl', ['$scope','$route', function($scope,$route) {   
  //$route.reload(); Then this should work fine.
}]);
24
дададзена

Проста загрузіце ўсе, выкарыстоўвайце window.location.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/

9
дададзена

У мяне быў цяжкі бой з гэтай праблемай на працягу некалькіх месяцаў, і адзінае рашэнне, якое працавала для мяне гэта:

var landingUrl = "http://www.ytopic.es"; //URL complete
$window.location.href = landingUrl;
7
дададзена
Гэта амаль не адрозніваецца, чым рабіць $ window.location.reload() , у які OP спецыяльна згадвае не працуе належным чынам у яго выпадку.
дададзена аўтар cpburnz, крыніца

Самае простае рашэнне, я зразумеў, быў,

дадаць «/» на маршрут, які хоча быць адноўленая кожны раз, калі вернецца.

напрыклад:

замест таго, каб у наступным

$routeProvider
  .when('/About', {
    templateUrl: 'about.html',
    controller: 'AboutCtrl'
  })

выкарыстоўваць,

$routeProvider
  .when('/About/', { //notice the '/' at the end 
    templateUrl: 'about.html',
    controller: 'AboutCtrl'
  })
5
дададзена
што гэта значыць ? не працуе angular2?
дададзена аўтар Pardeep Jain, крыніца
не, не на ўсіх, ваш адказ не так ужо дрэнна downvote. Дзіўна, я не зараз, чаму ж не працуе для мяне ў angular2.
дададзена аўтар Pardeep Jain, крыніца
Гэта працуе, нават калі зыходны шлях з'яўляецца коранем прыкладання - /: O Мой маршрут цяпер выглядае наступным чынам: //
дададзена аўтар MadPhysicist, крыніца
@PardeepJain Гэта працуе для мяне. Менавіта таму гэта адказ. Вы downvote мой адказ?
дададзена аўтар Diyoda_, крыніца
Ідэальнае рашэнне. Thks!
дададзена аўтар simon, крыніца
У кутні 6 працуе пасля выкарыстання #, можа быць выкарыстана для Angular2 таксама. думаю так
дададзена аўтар T. Shashwat, крыніца

Калі вы хочаце абнавіць кантролер пры абнаўленні якіх-небудзь паслуг, якія вы выкарыстоўваеце, вы можаце выкарыстоўваць гэта рашэнне:

  • Inject $ стан

гэта значыць

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, а таксама можна назваць <�моцны> Абнавіць або пересборку .

4
дададзена
гэта для Ui маршрутызатар ня кутняя.
дададзена аўтар dgzornoza, крыніца

Я атрымаў гэты працоўны код для выдалення кэша і перазагрузкі старонкі

<�Моцны> Выгляд

        
             

<�Моцны> кантролер

Injectors: $scope,$state,$stateParams,$templateCache

       $scope.reload = function() {//To Reload anypage
            $templateCache.removeAll();     
            $state.transitionTo($state.current, $stateParams, { reload: true, inherit: true, notify: true });
        };
3
дададзена

<�Моцны> Перад Кутняе 2 (AngularJs) </моцны>

скразны маршрут

$route.reload();

Калі вы хочаце перазагрузіць ўсе прыкладанне

$window.location.reload();

<�Моцны> Кутні 2 + </моцны>

impабоt { Location } from '@angular/common';

constructабо(private location: Location) {}

ngOnInit() {  }

load() {
    this.location.reload()
}

або

constructабо(private location: Location) {}

ngOnInit() {  }

Methods (){
    this.ngOnInit();
}
3
дададзена

Выкарыстоўвайце наступны код без інтымнага апавяшчэння перагрузачных да карыстача. Ён будзе аказваць старонку

var currentPageTemplate = $route.current.templateUrl;
$templateCache.remove(currentPageTemplate);
$window.location.reload();
2
дададзена