AngularJS - Tam sayfa yüklemesiyle nasıl yeniden yönlendirme yapabilirim?


94

Web sunucumdaki çerezlerin sayfa yüklendiğinde yenilenmesi için tam sayfayı yeniden yükleyen bir yeniden yönlendirme yapmak istiyorum. window.location = "/#/Next"ve window.location.href = "/#/Next"çalışmazsa, sunucuya çarpmayan bir Açısal yol yaparlar.

Bir Angular denetleyicide tam sunucu talebinde bulunmanın doğru yolu nedir?


8
bunu hiç çözdün mü?
superjos

7
bunu hiç çözdün mü?
Nolwennig

6
bunu hiç çözdün mü?
Dan Beaulieu

5
bunu hiç çözdün mü?
My Stack Overfloweth

4
bunu hiç çözdün mü?
shahzain ali

Yanıtlar:


184

İçin <a>etiketleri :

Sen sopa gerekir target="_self"senin üzerinde <a>etiketi

AngularJS'in tam sayfayı yeniden yükleyeceği üç durum vardır:

  • Hedef öğe içeren bağlantılar
    Örnek:<a href="https://stackoverflow.com/ext/link?a=b" target="_self">link</a>
  • Farklı bir alana giden mutlak bağlantılar
    Örnek:<a href="http://angularjs.org/">link</a>
  • Temel tanımlandığında farklı bir temel yola götüren '/' ile başlayan bağlantılar
    Örnek:<a href="https://stackoverflow.com/not-my-base/link">link</a>

JavaScript kullanarak :

$locationServis değişikliği sadece URL yapmanızı sağlar; sayfayı yeniden yüklemenize izin vermiyor. Eğer URL'yi değiştirip farklı bir sayfaya sayfayı veya gezinmek yeniden gerektiğinde, bir alt düzey API kullanın: $window.location.href.

Görmek:


15
$ window.location.href, window.location.href ile aynı şeyi yapar. $ Window'un sadece pencere için bir paketleme hizmeti olduğundan oldukça eminim. Her iki durumda da her ikisi de tam sayfa yenilemesi yerine bir Açısal rota yapar.
Mike Pateras

3
$ window.location.href kesinlikle tam sayfa yenilemesine neden oluyor, bunu uygulamamda yapıyorum.
jszobody

3
Ben de aynı şeyi okudum. Chrome'un mevcut sürümünde çalışmıyor. Açısal bir rota var.
Mike Pateras

1
1.0.6 CDN'den. Bunu bir $ http.post başarı geri araması içinde yapıyorum, önemliyse, geri aramanın dışında denedim ve aynı sonuçları aldım. Yönlendirmeyi "/" konumuna yaparsam (benim de bir Açısal rotam tanımlıyım), tam sayfa yenilemeyle çalışır, ancak "/ # / Sonraki" yalnızca görünüm değişir.
Mike Pateras

5
<a href="..." target="_self">benim için işe yarayan şey. Teşekkürler !
Michael

33

JS kodundan (yani HTML çapasından değil) çalışırken aynı sorunu yaşadık. Bunu şu şekilde çözdük:

  1. Gerekirse, mevcut URL'yi hizmet aracılığıyla sanal olarak değiştirin $location. Bu, hedefiniz mevcut URL'nin yalnızca bir varyasyonuysa yararlı olabilir, böylece $locationyardımcı yöntemlerden yararlanabilirsiniz . Örneğin $location.search(..., ...), bir sorgu dizisi parametresinin değerini değiştirmek için koştuk .

  2. $location.url()Gerekirse güncel olanı kullanarak yeni hedef URL'yi oluşturun . Çalışmak için bu yenisinin şema, etki alanı ve bağlantı noktasından sonraki her şeyi içermesi gerekiyordu. Örneğin, şu adrese gitmek istiyorsanız:

    http://yourdomain.com/YourAppFolder/YourAngularApp/#/YourArea/YourAction?culture=en

    URL'yi şu şekilde ayarlamalısınız:

    var destinationUrl = '/YourAppFolder/YourAngularApp/#/YourArea/YourAction?culture=en';

    (önde '/'gelenle birlikte).

  3. Düşük düzeyde yeni hedef URL atayın :$window.location.href = destinationUrl;

  4. Yeniden yüklemeye zorla, hala düşük seviyede: $window.location.reload();


1
Bu benim için Chrome 38 ile Angular 1.3.1'de çalışmıyor. $ Window.location.href'in değeri, bir yol veya tam URL atadığımda değişmiyor. Benim için yalnızca $ window.location.assign () çalıştı.
FelixM

Felix aynı sorun mu yaşıyorsunuz, farklı bir yolu çözdün stackoverflow.com/questions/31137809/...
Suruş Hakami

13

Arama yaptıktan ve isabet ve deneme oturumunu verdikten sonra, ilk olarak URL'yi şöyle belirterek çözebiliyorum:

$window.location.href = '/#/home/stats';

sonra yeniden yükle

$window.location.reload();

Bu sorunu çözmüş gibi görünüyor, ancak tarayıcıda geri ve ileri tıklamak birçok tutarsızlığa neden olacaktır.
luisluix

9

Ben de aynı sorunu yaşadım. Kullandığımda window.location, $window.locationhatta <a href="..." target="_self">rota bile sayfayı yenilemiyor. Yani uygulamamda istediğim şey olmayan önbelleğe alınmış hizmetler kullanılıyor. Yönlendirmeden sonra sayfayı yeniden yüklemeye zorlamak için window.location.reload()sonrasını ekleyerek window.locationçözdüm. Bu yöntem, sayfayı iki kez yüklüyor gibi görünüyor. Pis bir numara olabilir ama işe yarıyor. Şimdi ona böyle sahibim:

  $scope.openPage = function (pageName) {
      window.location = '#/html/pages/' + pageName;
      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.