Saya ingin membaca nilai parameter kueri URL menggunakan AngularJS. Saya mengakses HTML dengan URL berikut:
http://127.0.0.1:8080/test.html?target=bob
Seperti yang diharapkan, location.search
adalah "?target=bob"
. Untuk mengakses nilai target , saya telah menemukan berbagai contoh yang terdaftar di web, tetapi tidak ada yang bekerja di AngularJS 1.0.0rc10. Secara khusus, berikut ini semuanya undefined
:
$location.search.target
$location.search['target']
$location.search()['target']
Adakah yang tahu apa yang akan berhasil? (Saya menggunakan $location
sebagai parameter ke controller saya)
Memperbarui:
Saya telah memposting solusi di bawah ini, tetapi saya tidak sepenuhnya puas dengannya. Dokumentasi di Panduan Pengembang: Layanan Angular: Menggunakan $ location menyatakan yang berikut tentang $location
:
Kapan saya harus menggunakan $ location?
Kapan saja aplikasi Anda perlu bereaksi terhadap perubahan pada URL saat ini atau jika Anda ingin mengubah URL saat ini di browser.
Untuk skenario saya, halaman saya akan dibuka dari halaman web eksternal dengan parameter kueri, jadi saya tidak "bereaksi terhadap perubahan dalam URL saat ini" per se. Jadi mungkin $location
bukan alat yang tepat untuk pekerjaan itu (untuk detail yang jelek, lihat jawaban saya di bawah). Karena itu saya mengubah judul pertanyaan ini dari "Bagaimana cara membaca parameter kueri di AngularJS menggunakan $ location?" to "Apa cara paling ringkas untuk membaca parameter kueri di AngularJS?". Jelas saya hanya bisa menggunakan javascript dan ekspresi reguler untuk mem-parsing location.search
, tetapi pergi ke tingkat rendah untuk sesuatu yang sangat mendasar benar-benar menyinggung perasaan programmer saya.
Jadi: apakah ada cara yang lebih baik untuk digunakan $location
daripada jawaban saya, atau adakah alternatif yang ringkas?
http://127.0.0.1:8080/test.html#?target=bob
akan bekerja, perhatikan #
sebelum ?
. $location
adalah metode perutean tingkat kedua yang tidak dapat dikirim ke server.
$location.search()['target']
berfungsi setelah $locationProvider.html5Mode(true)
dipanggil di browser modern.