Saya belajar AngularJS dan ada satu hal yang sangat mengganggu saya.
Saya gunakan $routeProvider
untuk menyatakan aturan perutean untuk aplikasi saya:
$routeProvider.when('/test', {
controller: TestCtrl,
templateUrl: 'views/test.html'
})
.otherwise({ redirectTo: '/test' });
tetapi ketika saya menavigasi ke aplikasi saya di browser saya melihat app/#/test
bukan app/test
.
Jadi pertanyaan saya adalah mengapa AngularJS menambahkan hash ini #
ke url? Apakah ada kemungkinan untuk menghindarinya?
javascript
angularjs
pikkvile
sumber
sumber
Jawaban:
Bahkan Anda membutuhkan # (tagar) untuk browser non HTML5.
Kalau tidak, mereka hanya akan melakukan panggilan HTTP ke server di href yang disebutkan. # Adalah sebuah shortcircuit browser lama yang tidak memecat permintaan, yang memungkinkan banyak kerangka kerja js membangun rerouting di sisi klien mereka sendiri.
Anda dapat menggunakan
$locationProvider.html5Mode(true)
untuk memberitahu sudut untuk menggunakan strategi HTML5 jika tersedia.Di sini daftar browser yang mendukung strategi HTML5: http://caniuse.com/#feat=history
sumber
Jika Anda mengaktifkan html5mode seperti yang orang lain katakan, dan buat
.htaccess
file dengan konten berikut (sesuaikan dengan kebutuhan Anda):Pengguna akan diarahkan ke aplikasi Anda ketika mereka memasuki rute yang tepat, dan aplikasi Anda akan membaca rute dan membawa mereka ke "halaman" yang benar di dalamnya.
EDIT: Pastikan saja tidak ada file atau nama direktori yang bertentangan dengan rute Anda.
sumber
/about
halaman gagal kecuali saya datang melalui aplikasi.Mari kita tulis jawaban yang terlihat sederhana dan pendek
terima kasih kepada @plus - untuk merinci jawaban di atas
sumber
mencoba
Info lebih lanjut di $ locationProvider
Menggunakan $ location
sumber
Informasi berikut ini dari:
https://scotch.io/quick-tips/pretty-urls-in-angularjs-removing-the-hashtag
Sangat mudah untuk mendapatkan URL bersih dan menghapus tagar dari URL di Angular.
Secara default, AngularJS akan merutekan URL dengan tagar Sebagai Contoh:
http://www.example.com
http://www.example.com/#/about
http://www.example.com/#/contact
Ada 2 hal yang perlu dilakukan.
Mengkonfigurasi $ locationProvider
Menetapkan basis kami untuk tautan relatif
$ lokasi Layanan
Di Angular, layanan $ location mem-parsing URL di bilah alamat dan membuat perubahan pada aplikasi Anda dan sebaliknya.
Saya akan sangat merekomendasikan membaca dokumen resmi $ lokasi Angular untuk merasakan layanan lokasi dan apa yang disediakannya.
https://docs.angularjs.org/api/ng/service/$location
$ locationProvider dan html5Mode
Kami akan melakukan ini ketika mendefinisikan aplikasi Angular Anda dan mengkonfigurasi rute Anda.
Apa itu API Sejarah HTML5? Ini adalah cara standar untuk memanipulasi riwayat browser menggunakan skrip. Ini memungkinkan Angular mengubah perutean dan URL halaman kami tanpa menyegarkan halaman. Untuk informasi lebih lanjut tentang ini, berikut adalah Artikel API Sejarah HTML5 yang bagus:
http://diveintohtml5.info/history.html
Pengaturan Untuk Tautan Relatif
<base>
dalam<head>
dokumen Anda. Ini mungkin dalam file root index.html aplikasi Angular Anda. Temukan<base>
tag, dan atur ke root URL yang Anda inginkan untuk aplikasi Anda.Sebagai contoh:
<base href="https://stackoverflow.com/">
Fallback untuk Browser yang Lebih Lama
Kesimpulannya
sumber
Jika Anda ingin mengonfigurasi ini secara lokal pada OS X 10.8 yang melayani Angular dengan Apache, maka Anda mungkin menemukan yang berikut ini di file .htaccess Anda membantu:
Opsi + Tautan FollowSym jika tidak diset dapat memberi Anda kesalahan terlarang dalam log seperti:
Basis penulisan ulang diperlukan jika tidak, permintaan akan diselesaikan ke root server Anda yang secara lokal secara default bukan direktori proyek Anda, kecuali jika Anda telah mengkonfigurasi vhosts Anda secara khusus, jadi Anda perlu mengatur lintasan sehingga permintaan menemukan direktori root proyek Anda. Sebagai contoh pada mesin saya, saya memiliki direktori / Users / me / Sites di mana saya menyimpan semua proyek saya. Seperti pengaturan OS X lama.
Dua baris berikutnya secara efektif mengatakan jika jalur tersebut bukan direktori atau file, jadi Anda perlu memastikan Anda tidak memiliki file atau direktori yang sama dengan jalur rute aplikasi Anda.
Kondisi selanjutnya mengatakan jika permintaan tidak diakhiri dengan ekstensi file yang ditentukan jadi tambahkan apa yang Anda butuhkan di sana
Dan [L] yang terakhir mengatakan untuk melayani file index.html - aplikasi Anda untuk semua permintaan lainnya.
Jika Anda masih memiliki masalah kemudian periksa log apache, itu mungkin akan memberi Anda petunjuk yang berguna:
sumber
Menggunakan mode HTML5 memerlukan penulisan ulang URL di sisi server, pada dasarnya Anda harus menulis ulang semua tautan Anda ke titik masuk aplikasi Anda (mis. Index.html). Memerlukan
<base>
tag juga penting untuk kasus ini, karena memungkinkan AngularJS untuk membedakan antara bagian url yang merupakan basis aplikasi dan jalur yang harus ditangani oleh aplikasi. Untuk informasi lebih lanjut, lihat Panduan Pengembang AngularJS - Menggunakan mode $ location HTML5 Server Side .Memperbarui
Cara: Mengkonfigurasi server Anda agar berfungsi dengan html5Mode 1
Saat Anda mengaktifkan html5Mode,
#
karakter tidak akan lagi digunakan di url Anda. The#
simbol berguna karena tidak memerlukan konfigurasi sisi server. Tanpa#
, url terlihat jauh lebih baik, tetapi juga membutuhkan penulisan ulang sisi server. Berikut ini beberapa contohnya:Penulisan Ulang Apache
Nginx Menulis Ulang
Azure IIS Menulis Ulang
Penulisan Ulang Cepat
Lihat juga
sumber
Di Angular 6, dengan router Anda, Anda dapat menggunakan:
sumber
Anda juga dapat menggunakan kode di bawah ini untuk mengalihkan ke halaman utama (rumah):
Setelah menentukan pengalihan Anda seperti di atas, Anda dapat mengalihkan halaman lain, misalnya:
sumber
**
** Karena
sumber