AngularJs: Sayfayı yeniden yükle


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

Sayfayı yeniden yüklemek istiyorum. Bunu nasıl yapabilirim?

Yanıtlar:


265

Hizmetin reloadyöntemini kullanabilirsiniz $route. Inject $routecontroller içerisinde ve daha sonra bir yöntem oluşturmak reloadRoute, sizinle ilgili şu $scope.

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

O zaman bağlantıda şu şekilde kullanabilirsiniz:

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

Bu yöntem, mevcut rotanın yeniden yüklenmesine neden olacaktır. Yine de tam bir yenileme yapmak istiyorsanız, bunu enjekte edebilir $windowve kullanabilirsiniz:

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


Daha sonra düzenleme (ui-yönlendirici):

JamesEddyEdwards ve Dunc tarafından cevaplarında belirtildiği gibi, açısal-ui / ui-yönlendirici kullanıyorsanız, mevcut durumu / rotayı yeniden yüklemek için aşağıdaki yöntemi kullanabilirsiniz. Bunun $stateyerine sadece enjekte edin $routeve sonra:

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

2
Yeniden yüklemeyi Açısal hale getirme konusunda umutsuzsanız bu iyi bir cevaptır.
spikeheap

Tüm bağlantılara bir eylem eklemek yerine bu davranışı global olarak nasıl değiştirebilirim
OMGPOP

@OMGPOP Tüm bağlantılar için küresel olarak tam olarak neyi kastediyorsunuz?
Alexandrin Rus

Demek istediğim, tüm bağlantılar için bunu yapmanız gerekiyor. tüm bağlantılar için bir kez yapılandırmak mümkün mü?
OMGPOP

@AlexandrinRus bu bana aşağıdaki [$ rootScope: infdig] 10 $ özet () yinelemelerine ulaşıldı. Durduruluyor!
alphapilgrim

52

windownesne, daha kolay test etme ve alay etme$window için hizmet aracılığıyla kullanıma sunulur , aşağıdaki gibi bir şeyle gidebilirsiniz:

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

Ve :

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

Bir yan not olarak, $ route.reload () işlevinin sayfayı gerçekten yeniden yüklediğini düşünmüyorum, sadece rotayı .


2
Ben kullanmanızı tavsiye $windowyerine window.
Jeroen

Katkınız için teşekkürler. Bize nedenini açıklar mısınız?
Florian F.

1
Evet üzgünüm. En iyi şekilde $windowdokümanlar tarafından açıklanmaktadır , çünkü esas reloadPageolarak kullanıldığında (daha iyi) test edilebilir olacaktır $window.
Jeroen

19
 location.reload(); 

Hile yapıyor.

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

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

Rotalara veya herhangi bir şeye gerek yok, sadece eski js


2
sadeliği seviyorum!
Shawn de Wet

14

Alexandrin'in cevabına benzer, ancak $ route yerine $ state kullanılıyor:

(JimTheDev'in SO cevabından burada .)

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

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

9

Angulars'ı kesinlikle tavsiye edeceğim daha gelişmiş bir ui-yönlendirici kullanıyorsanız, şimdi basitçe kullanabilirsiniz:

$state.reload();

Temelde Duncan'ın cevabıyla aynı şeyi yapıyor.


5

Sonsuz döngüden kaçınmak için benim çözümüm, yeniden yönlendirmeyi yapan başka bir durum oluşturmaktı:

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

2

Açısal 2+

Bunu Angular 2+ ararken buldum, işte yol:

$window.location.reload();

1
Bu arada, bu javascript yolu ile açılıya özgü değildir.
Nitin Jadhav

1

Kullanması yeterince kolaydır $route.reload()(denetleyicinize $ route enjekte etmeyi unutmayın), ancak örneğinizden "ng-href" yerine "href" kullanabilirsiniz:

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

Angular, {{}} etiketlerinin içeriğini değiştirmeden önce, kullanıcıyı tıklamalarının neden olduğu geçersiz bağlantılardan korumak için yalnızca ng-href kullanmanız gerekir.


$ route, ng.route.IRouteService'in bir parçası mı?
kraker

1

Angular 1.5'te - tam sayfa yenilemeden yalnızca verileri yeniden yüklemek isteyen yukarıdaki çözümlerden bazılarını denedikten sonra, verileri düzgün yükleme konusunda sorunlar yaşadım. Yine de fark ettim ki, başka bir rotaya gittiğimde ve daha sonra akıma geri döndüğümde, her şeyin yolunda gittiğini, ancak kullanarak sadece mevcut rotayı yeniden yüklemek istediğimde $route.reload(), kodun bir kısmının düzgün şekilde çalıştırılmadığını fark ettim . Daha sonra şu şekilde mevcut rotaya yeniden yönlendirmeyi denedim:

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

ve modül yapılandırmasında başka bir tane ekleyin 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'
     });
}])

ve benim için gayet iyi çalışıyor. Sayfanın tamamını yenilemez, ancak yalnızca geçerli denetleyicinin ve şablonun yeniden yüklenmesine neden olur. Biraz karmaşık olduğunu biliyorum ama bulduğum tek çözüm buydu.


daha kolay bir yol olabilir var reload = $location.url(); $location.url(''); $timeout(function() { $location.url(reload); });; rastgele rotalar oluşturmaya gerek yok. Ancak hangi kodun sizin için yeniden değerlendirilmediğini görmek ilginç olurdu. Görünüşe göre redirectTos ve resolveişlevler normal bir şekilde yeniden çalışıyor$route.reload() (console.log'lara bakın).
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>

ve kontrolörde

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

ve rota dosyasında

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

Dolayısıyla, url'de iletilen kimlik, bağlantıya tıklayarak çağrılan işlevden gelenle aynıysa, basitçe yeniden yükleyin, aksi takdirde istenen yolu izleyin.

Yardımcı olacaksa, lütfen bu yanıtı geliştirmeme yardım edin. Herhangi bir öneriye açığız.


Sayfanın neden yeniden yüklenmediğini anlamam bir ay sürdü
sam

0

Bu, düz JavaScript'te pencere nesnesinin reload () yöntemini çağırarak yapılabilir.

window.location.reload();


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.