Saya menggunakan angular2.0.0-beta.7. Ketika komponen dimuat pada jalur seperti /path?query=value1
itu diarahkan ke /path
. Mengapa paret GET dihapus? Bagaimana saya bisa mempertahankan parameter?
Saya memiliki kesalahan di router. Kalau saya punya rute utama suka
@RouteConfig([
{
path: '/todos/...',
name: 'TodoMain',
component: TodoMainComponent
}
])
dan rute anak saya suka
@RouteConfig([
{ path: '/', component: TodoListComponent, name: 'TodoList', useAsDefault:true },
{ path: '/:id', component: TodoDetailComponent, name:'TodoDetail' }
])
maka saya tidak bisa mendapatkan params di TodoListComponent. Saya bisa mendapatkan
params("/my/path;param1=value1;param2=value2")
tapi saya ingin yang klasik
query params("/my/path?param1=value1¶m2=value2")
typescript
angular
FireGM
sumber
sumber
@RouteConfig
inipath
?Jawaban:
Dengan menyuntikkan sebuah instance dari
ActivatedRoute
seseorang dapat berlangganan berbagai hal yang dapat diamati, termasuk aqueryParams
dan yangparams
dapat diamati:A CATATAN TENTANG TIDAK BERLAKU
@Reto dan @ codef0rmer dengan tepat menunjukkan bahwa, sesuai dokumen resmi, metode
unsubscribe()
komponenonDestroy()
di dalam tidak diperlukan dalam kasus ini. Ini telah dihapus dari contoh kode saya. (lihat kotak lansiran biru di tutorial ini )sumber
The Router manages the observables it provides and localizes the subscriptions. The subscriptions are cleaned up when the component is destroyed, protecting against memory leaks, so we don't need to unsubscribe from the route params Observable.
Ketika URL seperti ini http://stackoverflow.com?param1=value
Anda bisa mendapatkan param1 dengan kode ikuti:
sumber
Meskipun pertanyaan menentukan versi beta 7 , pertanyaan ini juga muncul sebagai hasil pencarian teratas di Google untuk frasa umum seperti parameter kueri 2 sudut . Untuk alasan inilah inilah jawaban untuk router terbaru (saat ini dalam alpha.7 ).
Cara params dibaca telah berubah secara dramatis. Pertama, Anda perlu menyuntikkan dependensi yang dipanggil
Router
dalam parameter konstruktor Anda seperti:dan setelah itu kita dapat berlangganan parameter kueri pada
ngOnInit
metode kita (konstruktor juga boleh, tetapingOnInit
harus digunakan untuk testabilitas) sepertiDalam contoh ini kita membaca parameter id query dari URL like
example.com?id=41
.Masih ada beberapa hal yang perlu diperhatikan:
params
sejenisparams['id']
selalu mengembalikan string , dan ini dapat dikonversi ke angka dengan awalan dengan+
.sumber
if (params.hasOwnProperty('id')) { this.selectedId = params['id'] } else { this.selectedId = params['identification']}
.Saya benar-benar menyukai jawaban StevePaul tetapi kami dapat melakukan hal yang sama tanpa panggilan berlangganan / berhenti berlangganan yang asing.
sumber
Untuk mengirim parameter permintaan
Untuk menerima permintaan params
Sumber resmi
sumber
Hai, Anda dapat menggunakan URLSearchParams, Anda dapat membaca lebih lanjut di sini .
impor:
dan fungsi:
Perhatikan : Ini tidak didukung oleh semua platform dan tampaknya dalam kondisi "EKSPERIMENTAL" oleh dokumen sudut
sumber
if (window.location.search.indexOf('?') == 0){ normalizedQueryString = window.location.search.substring(1); } else { normalizedQueryString = window.location.search; } let params = new URLSearchParams(normalizedQueryString);
Pertama, apa yang saya temukan bekerja dengan Angular2 adalah bahwa url dengan string kueri/path;query=value1
Untuk mengaksesnya dalam komponen yang Anda gunakan Begitu juga ini, tetapi sekarang ikuti blok kode:
Mengenai mengapa itu akan dihapus ketika Anda memuat komponen, itu bukan perilaku default. Saya memeriksa secara spesifik dalam proyek pengujian bersih dan tidak diarahkan atau diubah. Apakah ini rute default atau sesuatu yang khusus tentang perutean?
Baca tentang perutean dengan string kueri dan params di Tutorial Angular2 di https://angular.io/docs/ts/latest/guide/router.html#!#query-parameters
sumber
Anda bisa mendapatkan parameter kueri saat diteruskan ke dalam URL menggunakan ActivatedRoute seperti yang dinyatakan di bawah ini: -
url: - http: /domain.com? test = abc
sumber
Dapatkan param URL sebagai objek.
sumber
Jika Anda hanya ingin mendapatkan parameter kueri sekali, cara terbaik adalah menggunakan metode take sehingga Anda tidak perlu khawatir tentang berhenti berlangganan. Berikut ini cuplikan sederhana: -
Catatan: Hapus take (1) jika Anda ingin menggunakan nilai parameter di masa depan.
sumber
sekarang adalah:
sumber
Saya harap ini akan membantu orang lain.
Pertanyaan di atas menyatakan bahwa nilai param query diperlukan setelah halaman dialihkan dan kita dapat mengasumsikan bahwa nilai snapshot (alternatif tanpa-pengamatan) akan cukup.
Tidak ada seorang pun di sini yang menyebutkan tentang snapshot.paramMap.get dari dokumentasi resmi .
Jadi sebelum mengirimnya tambahkan ini dalam mengirim / mengarahkan kembali komponen:
kemudian arahkan kembali sebagai (didokumentasikan di sini ):
atau hanya:
Pastikan Anda telah menambahkan ini dalam modul perutean Anda seperti yang didokumentasikan di sini :
Dan akhirnya, di komponen Anda yang perlu menggunakan parameter kueri
tambahkan impor (didokumentasikan di sini ):
menyuntikkan ActivatedRoute
(dokumentasi juga mengimpor switchMap dan juga menyuntikkan Router dan HeroService - tetapi mereka diperlukan hanya untuk alternatif yang dapat diamati - mereka TIDAK diperlukan ketika Anda menggunakan alternatif snapshot seperti dalam kasus kami):
dan dapatkan nilai yang Anda butuhkan (didokumentasikan di sini ):
CATATAN: JIKA ANDA MENAMBAHKAN MODUL ROUTING PADA MODUL FITUR (SEPERTI YANG DITUNJUKKAN DALAM DOKUMENTASI) PASTIKAN BAHWA DALAM APLIKASI. MODEL ROUTING DATANG SEBELUM AppRoutingModule (atau file lain dengan rute aplikasi level root) DI IMPOR: []. FITUR LAINNYA ROUTES TIDAK AKAN DITEMUKAN (SEPERTI MEREKA AKAN DATANG SETELAH {path: '**', redirectTo: '/ not-found'} dan Anda hanya akan melihat pesan yang tidak ditemukan).
sumber
Anda hanya perlu menyuntikkan ActivatedRoute di konstruktor dan kemudian hanya mengakses params atau queryParams di atasnya
Dalam beberapa kasus itu tidak memberikan apa pun di NgOnInit ... mungkin karena panggilan init sebelum inisialisasi params dalam kasus ini Anda dapat mencapai ini dengan meminta diamati untuk menunggu beberapa saat dengan fungsi debounceTime (1000)
misalnya =>
debounceTime () Memancarkan nilai dari sumber yang dapat diamati hanya setelah rentang waktu tertentu berlalu tanpa emisi sumber lain
sumber
Anda tidak bisa mendapatkan parameter dari RouterState jika itu tidak ditentukan dalam rute, jadi dalam contoh Anda, Anda harus mengurai querystring ...
Berikut adalah kode yang saya gunakan:
sumber
Kueri dan Path (Sudut 8)
Jika Anda memiliki url seperti https://myapp.com/owner/123/show?height=23 lalu gunakan
MEMPERBARUI
Dalam kasus ketika Anda menggunakan
this.router.navigate([yourUrl]);
dan parameter kueri Anda tertanam dalamyourUrl
string kemudian sudut menyandikan URL dan Anda mendapatkan sesuatu seperti ini https://myapp.com/owner/123/show%3Fheight%323 - dan solusi di atas akan memberikan hasil yang salah ( queryParams akan kosong, dan params kueri dapat direkatkan ke param path terakhir jika ada di ujung path). Dalam hal ini ubah cara navigasi ke inisumber