AngularJs: ricarica la pagina


135
<a ng-href="#" class="navbar-brand" title="home" data-translate>PORTAL_NAME</a>

Voglio ricaricare la pagina. Come posso fare questo?

Risposte:


265

È possibile utilizzare il reloadmetodo del $routeservizio. Iniettare $routenel controller e quindi creare un metodo reloadRoutesul proprio $scope.

$scope.reloadRoute = function() {
   $route.reload();
}

Quindi puoi usarlo sul link in questo modo:

<a ng-click="reloadRoute()" class="navbar-brand" title="home"  data-translate>PORTAL_NAME</a>

Questo metodo farà ricaricare la rotta corrente. Se tuttavia desideri eseguire un aggiornamento completo, puoi iniettare $windowe utilizzare quello:

$scope.reloadRoute = function() {
   $window.location.reload();
}


Modifica successiva (ui-router):

Come menzionato da JamesEddyEdwards e Dunc nelle loro risposte, se si utilizza angular-ui / ui-router è possibile utilizzare il seguente metodo per ricaricare lo stato / percorso corrente. Basta iniettare $stateinvece di $routee quindi hai:

$scope.reloadRoute = function() {
    $state.reload();
};

2
Questa è una buona risposta se sei disperato di angularizzare la ricarica.
spikeheap,

Come posso cambiare questo comportamento a livello globale invece di aggiungere un'azione a tutti i collegamenti
OMGPOP

@OMGPOP Cosa intendi esattamente a livello globale per tutti i link?
Alexandrin Rus,

Voglio dire, per tutti i link è necessario farlo. è possibile configurare una volta per tutti i collegamenti?
OMGPOP,

@AlexandrinRus questo mi dà le seguenti [$ rootScope: infdig] 10 $ digest () iterazioni raggiunte. Interruzione!
Alphapilgrim,

52

windowL'oggetto è reso disponibile tramite il $windowservizio per test e derisioni più facili , puoi scegliere qualcosa come:

$scope.reloadPage = function(){$window.location.reload();}

E :

<a ng-click="reloadPage"  class="navbar-brand" title="home"  data-translate>PORTAL_NAME</a>

Come nota a margine, non credo che $ route.reload () ricarichi effettivamente la pagina, ma solo il percorso .


2
Consiglio di utilizzare $windowinvece di window.
Jeroen,

Grazie per il tuo contributo Ci spiegheresti perché?
Florian F.

1
Sì scusa. E 'meglio spiegato con i $windowdocumenti , soprattutto è perché reloadPagesarebbe (meglio) verificabile quando si utilizza $window.
Jeroen,

19
 location.reload(); 

Fa il trucco.

<a ng-click="reload()">

$scope.reload = function()
{
   location.reload(); 
}

Non c'è bisogno di percorsi o altro semplicemente vecchi js


2
amo la semplicità!
Shawn de Wet

14

Simile alla risposta di Alexandrin, ma usando $ state piuttosto che $ route:

(Dalla risposta SO di JimTheDev qui .)

$scope.reloadState = function() {
   $state.go($state.current, {}, {reload: true});
}

<a ng-click="reloadState()" ... 

9

Se si utilizza un Ui -router più avanzato Angolare che consiglio vivamente, ora è possibile utilizzare semplicemente:

$state.reload();

Che essenzialmente sta facendo lo stesso della risposta di Dunc.


5

La mia soluzione per evitare il ciclo infinito era quella di creare un altro stato che ha effettuato il reindirizzamento:

$stateProvider.state('app.admin.main', {
    url: '/admin/main',
    authenticate: 'admin',
    controller: ($state, $window) => {
      $state.go('app.admin.overview').then(() => {
        $window.location.reload();
      });
    }
  });

2

Angolare 2+

Ho trovato questo durante la ricerca di Angular 2+, quindi ecco il modo:

$window.location.reload();

1
questo non è specifico dell'angolare, tra l'altro, il suo modo javascript.
Nitin Jadhav,

1

È abbastanza facile da usare $route.reload()(non dimenticare di iniettare $ route nel tuo controller), ma dal tuo esempio potresti semplicemente usare "href" invece di "ng-href":

<a href=""  class="navbar-brand" title="home"  data-translate>PORTAL_NAME</a>

Devi solo utilizzare ng-href per proteggere l'utente da collegamenti non validi causati dal fatto che questi facciano clic prima che Angular abbia sostituito il contenuto dei tag {{}}.


$ route fa parte di ng.route.IRouteService ??
cracker,

1

Su Angular 1.5: dopo aver provato alcune delle soluzioni sopra descritte che desiderano ricaricare solo i dati senza aggiornamento completo della pagina, ho avuto problemi con il caricamento corretto dei dati. Ho notato, però, che quando vado su un'altra rotta e poi torno alla corrente, tutto funziona bene, ma quando voglio ricaricare solo la rotta corrente usando $route.reload(), allora parte del codice non viene eseguito correttamente. Quindi ho provato a reindirizzare al percorso corrente nel modo seguente:

$scope.someFuncName = function () {
    //go to another route
    $location.path('/another-route');
};

e nella configurazione del modulo, aggiungine un altro when:

.config(['$routeProvider', function($routeProvider) {
     $routeProvider.when('/first-page', {
         templateUrl: '/first-template',
         controller: 'SomeCtrl'
     }).when('/another-route', {//this is the new "when"
         redirectTo: '/first-page'
     });
}])

e funziona bene per me. Non aggiorna l'intera pagina, ma ricarica solo il controller e il modello correnti. So che è un po 'confuso, ma questa è stata l'unica soluzione che ho trovato.


un modo più semplice potrebbe essere var reload = $location.url(); $location.url(''); $timeout(function() { $location.url(reload); });; non è necessario creare percorsi casuali. Ma sarebbe interessante vedere quale codice non rivaluta per te. Sembra che anche redirectToS e resolvele funzioni di ri-eseguire su un normale$route.reload() (sguardo al console.log del).
Hashbrown,

1
<a title="Pending Employee Approvals" href="" ng-click="viewPendingApprovals(1)">
                    <i class="fa fa-user" aria-hidden="true"></i>
                    <span class="button_badge">{{pendingEmployeeApprovalCount}}</span>
                </a>

e nel controller

 $scope.viewPendingApprovals = function(type) {
                if (window.location.hash.substring(window.location.hash.lastIndexOf('/') + 1, window.location.hash.length) == type) {
                    location.reload();
                } else {
                    $state.go("home.pendingApproval", { id: sessionStorage.typeToLoad });
                }
            };

e nel file di route

.state('home.pendingApproval', {
        url: '/pendingApproval/:id',
        templateUrl: 'app/components/approvals/pendingApprovalList.html',
        controller: 'pendingApprovalListController'
    })

Quindi, se l'id passato nell'URL è uguale a quello che proviene dalla funzione chiamata facendo clic sull'ancora, quindi semplicemente ricaricare, altrimenti seguire il percorso richiesto.

Aiutatemi a migliorare questa risposta, se questo aiuta. Qualsiasi suggerimento è il benvenuto.


Mi ci è voluto un mese per capire perché la pagina non si sta ricaricando
sam

0

Questo può essere fatto chiamando il metodo reload () dell'oggetto finestra in JavaScript semplice

window.location.reload();


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.