AngularJS - Bagaimana saya bisa melakukan pengalihan dengan memuat halaman penuh?

94

Saya ingin melakukan pengalihan yang memuat ulang halaman penuh sehingga cookie dari server web saya di-refresh saat halaman dimuat. window.location = "/#/Next"dan window.location.href = "/#/Next"tidak berfungsi, mereka melakukan rute Angular yang tidak masuk ke server.

Apa cara yang benar untuk membuat permintaan server lengkap dalam pengontrol Angular?

Mike Pateras
sumber
8
apakah kamu pernah menyelesaikan ini?
superjos
7
apakah kamu pernah menyelesaikan ini?
Nolwennig
6
apakah kamu pernah menyelesaikan ini?
Dan Beaulieu
5
apakah kamu pernah menyelesaikan ini?
My Stack Overfloweth
4
apakah kamu pernah menyelesaikan ini?
shahzain ali

Jawaban:

183

Untuk <a>tag :

Anda harus menempel target="_self"pada <a>tag Anda

Ada tiga kasus di mana AngularJS akan melakukan pemuatan ulang halaman penuh:

  • Tautan yang mengandung elemen target
    Contoh:<a href="https://stackoverflow.com/ext/link?a=b" target="_self">link</a>
  • Tautan mutlak yang menuju ke domain yang berbeda
    Contoh:<a href="http://angularjs.org/">link</a>
  • Tautan yang dimulai dengan '/' yang mengarah ke jalur basis yang berbeda ketika basis ditentukan
    Contoh:<a href="https://stackoverflow.com/not-my-base/link">link</a>

Menggunakan javascript :

The $locationlayanan memungkinkan Anda untuk perubahan hanya URL; itu tidak memungkinkan Anda untuk memuat ulang halaman. Ketika Anda perlu mengubah URL dan reload halaman atau menavigasi ke halaman yang berbeda, gunakan tingkat API yang lebih rendah: $window.location.href.

Lihat:

jszobody.dll
sumber
15
$ window.location.href melakukan hal yang sama dengan window.location.href. Saya cukup yakin $ window hanyalah layanan pembungkus untuk jendela. Keduanya melakukan rute Sudut alih-alih menyegarkan laman penuh.
Mike Pateras
3
$ window.location.href pasti menyebabkan penyegaran halaman penuh, saya melakukannya di aplikasi saya.
jszobody
3
Saya telah membaca hal yang sama. Tidak berfungsi di versi Chrome saat ini. Itu melakukan rute Angular.
Mike Pateras
1
1.0.6 dari CDN. Saya melakukan ini dalam callback sukses $ http.post, jika itu penting, meskipun saya sudah mencobanya di luar callback dan mendapatkan hasil yang sama. Jika saya melakukan pengalihan ke "/" (yang saya tentukan juga untuk rute Angular), ini berfungsi dengan penyegaran halaman penuh, tetapi "/ # / Berikutnya" hanya mengubah tampilan.
Mike Pateras
5
<a href="..." target="_self">adalah yang berhasil untuk saya. terima kasih!
Michael
33

Kami memiliki masalah yang sama, bekerja dari kode JS (yaitu bukan dari jangkar HTML). Inilah cara kami menyelesaikannya:

  1. Jika perlu, secara virtual mengubah URL saat ini melalui $locationlayanan. Ini mungkin berguna jika tujuan Anda hanyalah variasi pada URL saat ini, sehingga Anda dapat memanfaatkan $locationmetode pembantu. Misalnya kita berlari $location.search(..., ...)untuk hanya mengubah nilai parameter querystring.

  2. Buat URL tujuan baru, menggunakan saat ini $location.url()jika diperlukan. Agar berfungsi, yang baru ini harus menyertakan semuanya setelah skema, domain, dan port. Jadi misalnya jika Anda ingin pindah ke:

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

    maka Anda harus mengatur URL seperti pada:

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

    (dengan memimpin '/'juga).

  3. Tetapkan URL tujuan baru di tingkat rendah :$window.location.href = destinationUrl;

  4. Paksa muat ulang, masih pada level rendah: $window.location.reload();

superjos
sumber
1
Ini tidak berhasil untuk saya di Angular 1.3.1 dengan Chrome 38. Nilai $ window.location.href tidak berubah ketika saya menetapkan jalur atau URL lengkap. Hanya $ window.location.assign () yang bekerja untuk saya.
FelixM
Memiliki masalah yang sama dengan Felix, menyelesaikannya dengan cara yang berbeda stackoverflow.com/questions/31137809/…
Soroush Hakami
13

Setelah mencari dan memberikan sesi hit dan trial, saya dapat menyelesaikannya dengan terlebih dahulu menentukan url like

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

lalu muat ulang

$window.location.reload();
Daniyal
sumber
Tampaknya ini menyelesaikan masalah, tetapi mengklik mundur dan maju di browser akan menyebabkan banyak ketidakkonsistenan.
luisluix
9

Saya memiliki masalah yang sama. Ketika saya menggunakan window.location, $window.locationatau bahkan <a href="..." target="_self">rute tidak menyegarkan halaman. Jadi layanan cache yang digunakan bukan yang saya inginkan di aplikasi saya. Saya menyelesaikannya dengan menambahkan window.location.reload()setelah window.locationuntuk memaksa halaman memuat ulang setelah perutean. Metode ini sepertinya memuat halaman dua kali. Mungkin trik kotor, tetapi berhasil. Beginilah cara saya memilikinya sekarang:

  $scope.openPage = function (pageName) {
      window.location = '#/html/pages/' + pageName;
      window.location.reload();
  };
Neel
sumber
1

Coba ini

$window.location.href="#page-name";
$window.location.reload();
Suresh Maurya
sumber