AngularJs: Seite neu laden


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

Ich möchte die Seite neu laden. Wie kann ich das machen?

Antworten:


265

Sie können die reloadMethode des $routeDienstes verwenden. Injizieren Sie $routein Ihren Controller und erstellen Sie dann eine Methode reloadRouteauf Ihrem $scope.

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

Dann können Sie es auf dem Link wie folgt verwenden:

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

Diese Methode bewirkt, dass die aktuelle Route neu geladen wird. Wenn Sie jedoch eine vollständige Aktualisierung durchführen möchten, können Sie Folgendes injizieren $windowund verwenden:

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


Später bearbeiten (UI-Router):

Wie von JamesEddyEdwards und Dunc in ihren Antworten erwähnt, können Sie bei Verwendung eines Angular-UI / UI-Routers die folgende Methode verwenden, um den aktuellen Status / die aktuelle Route neu zu laden. Einfach spritzen $statestatt $routeund dann haben Sie:

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

2
Dies ist eine gute Antwort, wenn Sie das Nachladen unbedingt angularisieren möchten.
Spikeheap

Wie kann ich dieses Verhalten global ändern, anstatt allen Links eine Aktion hinzuzufügen
OMGPOP

@OMGPOP Was genau meinst du global für alle Links?
Alexandrin Rus

Ich meine, für alle Links müssen Sie dies tun. Ist es möglich, einmal für alle Links zu konfigurieren?
OMGPOP

@AlexandrinRus dies gibt mir die folgenden [$ rootScope: infdig] 10 $ Digest () Iterationen erreicht. Abbruch!
Alphapilgrim

52

windowObjekt wird durch $windowService zur Verfügung gestellt , um das Testen und Verspotten zu erleichtern . Sie können mit etwas wie:

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

Und :

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

Als Randnotiz denke ich nicht, dass $ route.reload () tatsächlich die Seite neu lädt, sondern nur die Route .


2
Ich empfehle $windowanstelle von window.
Jeroen

Vielen Dank für Ihren Beitrag. Würden Sie uns erklären, warum?
Florian F.

1
Ja Entschuldigung. Es wird am besten durch die $windowDokumente erklärt , hauptsächlich, weil reloadPagees (besser) testbar wäre, wenn es verwendet wird $window.
Jeroen

19
 location.reload(); 

Macht den Trick.

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

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

Keine Notwendigkeit für Routen oder irgendetwas einfach nur altes js


2
liebe die Einfachheit!
Shawn de Wet

14

Ähnlich wie Alexandrins Antwort, jedoch mit $ state anstelle von $ route:

(Aus JimTheDevs SO-Antwort hier .)

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

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

9

Wenn Sie Angulars fortgeschritteneren UI -Router verwenden, den ich definitiv empfehlen würde, können Sie jetzt einfach Folgendes verwenden:

$state.reload();

Das ist im Wesentlichen dasselbe wie Duncs Antwort.


5

Meine Lösung, um die Endlosschleife zu vermeiden, bestand darin, einen anderen Status zu erstellen, der die Umleitung vorgenommen hat:

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

2

Winkel 2+

Ich habe dies bei der Suche nach Angular 2+ gefunden. Hier ist der Weg:

$window.location.reload();

1
Dies ist übrigens nicht spezifisch für Angular, sondern für Javascript.
Nitin Jadhav

1

Es ist einfach genug, nur zu verwenden $route.reload()(vergessen Sie nicht, $ route in Ihren Controller einzufügen), aber in Ihrem Beispiel könnten Sie einfach "href" anstelle von "ng-href" verwenden:

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

Sie müssen ng-href nur verwenden, um den Benutzer vor ungültigen Links zu schützen, die durch Klicken verursacht werden, bevor Angular den Inhalt der {{}} -Tags ersetzt hat.


$ route ist Teil von ng.route.IRouteService ??
Cracker

1

Unter Angular 1.5 hatte ich Probleme mit dem ordnungsgemäßen Laden der Daten, nachdem ich einige der oben genannten Lösungen ausprobiert hatte, bei denen nur die Daten ohne vollständige Seitenaktualisierung neu geladen werden sollten. Ich habe jedoch festgestellt, dass alles gut funktioniert, wenn ich zu einer anderen Route gehe und dann zur aktuellen zurückkehre. Wenn ich jedoch nur die aktuelle Route mit neu laden möchte $route.reload(), wird ein Teil des Codes nicht ordnungsgemäß ausgeführt. Dann habe ich versucht, auf folgende Weise zur aktuellen Route umzuleiten:

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

und fügen Sie in der Modulkonfiguration eine weitere hinzu 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'
     });
}])

und es funktioniert gut für mich. Es wird nicht die gesamte Seite aktualisiert, sondern nur der aktuelle Controller und die Vorlage werden neu geladen. Ich weiß, dass es ein bisschen hackig ist, aber das war die einzige Lösung, die ich gefunden habe.


ein einfacher Weg könnte sein var reload = $location.url(); $location.url(''); $timeout(function() { $location.url(reload); });; Es müssen keine zufälligen Routen erstellt werden. Es wäre jedoch interessant zu sehen, welcher Code für Sie nicht neu bewertet wird. Es sieht so aus, als würden sogar redirectTos und resolveFunktionen auf einem normalen$route.reload() Computer erneut ausgeführt (siehe die console.logs).
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>

und in der Steuerung

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

und in der Routendatei

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

Wenn die in der URL übergebene ID mit der ID übereinstimmt, die durch Klicken auf den Anker aufgerufen wird, laden Sie sie einfach neu, andernfalls folgen Sie der angeforderten Route.

Bitte helfen Sie mir, diese Antwort zu verbessern, wenn dies hilfreich ist. Vorschläge sind willkommen.


Ich habe einen Monat gebraucht, um herauszufinden, warum die Seite nicht neu geladen wird
sam

0

Dies kann durch Aufrufen der reload () -Methode des Fensterobjekts in einfachem JavaScript erfolgen

window.location.reload();


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.