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?

user880386
quelle

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();
};
Alexandrin Rus
quelle
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 .

Florian F.
quelle
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

user3806549
quelle
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()" ... 
Dunc
quelle
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.

JamesEddyEdwards
quelle
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();
      });
    }
  });
Gucu112
quelle
2

Winkel 2+

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

$window.location.reload();
Nitin Jadhav
quelle
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.

Spikeheap
quelle
$ 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.

vivanov
quelle
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.

AMRESH PANDEY
quelle
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();
Skillz
quelle
0

Dies kann durch Aufrufen der reload () -Methode in JavaScript erfolgen.

location.reload();
Madhusanka Edirimanna
quelle