Apa's paling ringkas cara untuk membaca parameter kueri di AngularJS?
I'd seperti untuk membaca nilai dari parameter kueri URL menggunakan AngularJS. I'm mengakses HTML dengan URL berikut:
http://127.0.0.1:8080/test.html?target=bob
Seperti yang diharapkan, lokasi.pencarian
adalah "?target=bob"
.
Untuk mengakses nilai dari target, I've temukan berbagai contoh yang tercantum di web, namun tidak satupun dari mereka bekerja di AngularJS 1.0.0rc10. Secara khusus, berikut ini adalah semua undefined
:
$lokasi.pencarian.target
$lokasi.pencarian['target']
$lokasi.pencarian()['target']
Ada yang tahu apa yang akan bekerja? (Saya'm menggunakan $location
sebagai parameter untuk saya controller)
Update:
I've diposting larutan di bawah ini, tapi saya'm tidak sepenuhnya puas dengan hal itu.
Dokumentasi di Panduan Pengembang: Sudut Jasa: Menggunakan $lokasi negara-negara berikut tentang $location
:
Kapan saya harus menggunakan $lokasi?
Setiap kali aplikasi anda perlu untuk bereaksi terhadap perubahan di saat ini URL atau jika anda ingin mengubah URL di browser.
Untuk skenario saya, saya halaman yang akan dibuka dari halaman web eksternal dengan parameter kueri, jadi saya'm tidak "bereaksi terhadap perubahan di URL saat ini" per se. Jadi mungkin $location
isn't alat yang tepat untuk pekerjaan itu (untuk rincian jelek, lihat jawaban saya di bawah ini). I've oleh karena itu mengubah judul dari pertanyaan ini dari "Bagaimana untuk membaca parameter kueri di AngularJS menggunakan $lokasi?" "Apa's paling ringkas cara untuk membaca parameter kueri di AngularJS?". Jelas saya hanya bisa menggunakan javascript dan ekspresi reguler untuk mengurai lokasi.pencarian
, akan tetapi yang tingkat rendah untuk sesuatu yang mendasar benar-benar menyinggung perasaan saya programmer kepekaan.
Jadi: apakah ada cara yang lebih baik untuk menggunakan $location
daripada yang saya lakukan di jawaban saya, atau ada yang ringkas alternatif?
Anda bisa inject $routeParams (membutuhkan ngRoute) ke controller. Berikut ini's contoh dari dokumen:
EDIT: Anda juga bisa mendapatkan dan mengatur parameter kueri dengan $lokasi layanan (tersedia di
ng
), terutama yangpencarian
metode: $lokasi.pencarian().$routeParams kurang berguna setelah controller's beban awal;
$lokasi.pencarian()
dapat dipanggil kapan saja.Baik bahwa anda've berhasil mendapatkan itu bekerja dengan html5 mode tapi hal ini juga mungkin untuk membuat ini bekerja di hashbang mode.
Anda hanya bisa menggunakan:
untuk mendapatkan akses ke 'target' pencarian param.
Untuk referensi, berikut ini adalah kerja jsFiddle: http://web.archive.org/web/20130317065234/http://jsfiddle.net/PHnLb/7/
Untuk memberikan sebagian jawaban pertanyaan saya sendiri, berikut ini adalah contoh untuk browser HTML5:
Kuncinya adalah untuk memanggil
$locationProvider.html5Mode(true);
seperti yang dilakukan di atas. Sekarang bekerja ketika membukahttp://127.0.0.1:8080/test.html?target=bob
. I'm tidak senang tentang fakta bahwa itu tidak't bekerja di browser yang lebih tua, tapi aku bisa menggunakan pendekatan ini pula.Alternatif yang akan bekerja dengan browser lama akan drop
html5mode(benar)
memanggil dan menggunakan alamat berikut dengan hash+slash sebagai gantinya:http://127.0.0.1:8080/test.html#/?target=bob
Dokumentasi yang relevan adalah di Panduan Pengembang: Sudut Jasa: Menggunakan $lokasi (aneh bahwa saya google pencarian didn't menemukan ini...).
Hal ini dapat dilakukan dengan dua cara:
$routeParams
Terbaik dan solusi yang disarankan adalah dengan menggunakan
$routeParams
ke controller. Itu MembutuhkanngRoute
modul yang akan diinstal.$lokasi.pencarian()
.Ada peringatan di sini. Ini akan bekerja hanya dengan HTML5 mode. Secara default, itu tidak bekerja untuk URL yang tidak memiliki hash(
#
) di dalamnyahttp://localhost/test?param1=abc¶m2=def
Anda dapat membuatnya bekerja dengan menambahkan
#/
di URL.http://localhost/test#/?param1=abc¶m2=def
$lokasi.pencarian()
untuk kembali suatu objek seperti:$lokasi.pencarian() akan bekerja hanya dengan HTML5 mode diaktifkan dan hanya mendukung browser.
Ini akan bekerja selalu:
$jendela.lokasi hotel ini.pencarian
Hanya untuk summerize .
Jika aplikasi anda adalah yang dimuat dari link eksternal maka sudut tidak akan mendeteksi ini sebagai URL berubah jadi $loaction.pencarian() akan memberikan anda sebuah obyek kosong . Untuk mengatasi ini, anda perlu untuk mengatur berikut di app config(app.js)
Hanya presisi untuk Ellis Whitehead's jawaban.
$locationProvider.html5Mode(true);
tidak't bekerja dengan versi baru dari angularjs tanpa menentukan URL dasar untuk aplikasi dengan<dasar href="">
tag atau pengaturan parameterrequireBase
untukpalsu
Doc :
hal ini dapat membantu uou
Apa's paling ringkas cara untuk membaca parameter kueri di AngularJS
anda juga bisa menggunakan $lokasi.$$pencarian.yourparameter
Saya menemukan bahwa untuk SPA HTML5Mode menyebabkan banyak kesalahan 404 masalah, dan hal ini tidak perlu untuk membuat $lokasi.pencarian bekerja dalam kasus ini. Dalam kasus saya saya ingin menangkap URL query string parameter ketika pengguna datang ke situs saya, terlepas dari mana "page" awalnya mereka link ke anda, DAN dapat mengirim mereka ke halaman yang setelah mereka masuk. Jadi saya hanya menangkap semua barang yang ada di aplikasi.menjalankan
kemudian setelah login saya dapat mengatakan $negara.pergi($rootScope.initialPage, $rootScope.initialParams)
It's sedikit terlambat, tapi saya pikir masalah anda adalah URL anda. Jika bukan
anda telah
I'm cukup yakin itu akan bekerja. Sudut adalah benar-benar pilih-pilih tentang #/