Apakah mungkin untuk memiliki parameter rute opsional di rute Angular 2? Saya mencoba sintaks Angular 1.x di RouteConfig tetapi menerima kesalahan di bawah ini:
"PENGECUALIAN ASLI: Jalur" / user /: id? "Berisi"? "Yang tidak diizinkan dalam konfigurasi rute."
@RouteConfig([
{
path: '/user/:id?',
component: User,
as: 'User'
}])
javascript
angular
Jeroen
sumber
sumber
RouteParams
tidak mengimpor ke komponen, periksa ini: stackoverflow.com/a/36792261/806202 . Solusinya adalah dengan menggunakanActivatedRoute
:route.snapshot.params['routeParam']
Dengan cara ini komponen tidak dirender ulang ketika parameter ditambahkan.
sumber
pathMatch: 'full'
untuk mengarahkan ulang, jika tidak jalur sepertiusers/admin
juga diarahkan dalam kasus saya/users/all
atau/users/home
, baca 'semua' atau 'rumah' sebagaiid
dan abaikan saja jika itu cocok dengan nilai ajaib Anda. Maka baris pertama di atas menjadiredirectTo: 'users/home'
atau apa pun yang Anda putuskan. Bagi saya garis miring sangat menonjol sebagai sesuatu yang salah.Dianjurkan untuk menggunakan parameter kueri ketika informasi tersebut opsional.
dari https://angular.io/guide/router#optional-route-parameters
Anda hanya perlu mengambil parameter dari jalur rute.
sumber
Angular 4 - Solusi untuk mengatasi pemesanan parameter opsional:
MELAKUKAN HAL INI:
Perhatikan bahwa
products
danproducts/:id
rute diberi nama yang persis sama. Sudut 4 akan mengikuti dengan benarproducts
untuk rute tanpa parameter, dan jika parameter itu akan mengikutiproducts/:id
.Namun, jalur untuk rute non-parameter tidak
products
boleh memiliki garis miring, jika tidak, sudut akan memperlakukannya sebagai jalur-parameter. Jadi dalam kasus saya, saya memiliki garis miring untuk produk dan itu tidak berhasil.JANGAN LAKUKAN INI:
sumber
data
ke komponen, yang dapat berbeda untuk setiap rute bahkan ke komponen yang sama. Contoh{path: 'products', component: ProductsComponent, data: { showAllProducts: true} },
dapat digunakan dan kemudian Anda memeriksashowAllProducts
. Sedikit lebih baik daripada memeriksa null, tetapi untuk kasus yang lebih sederhana mungkin baik-baik saja.Jawaban rerezz cukup bagus tetapi memiliki satu kelemahan serius. Itu menyebabkan
User
komponen menjalankan kembalingOnInit
metode.Mungkin bermasalah ketika Anda melakukan beberapa hal yang berat di sana dan tidak ingin itu dijalankan kembali ketika Anda beralih dari rute non-parametrik ke yang parametrik. Meskipun kedua rute tersebut dimaksudkan untuk meniru parameter url opsional, tidak menjadi 2 rute terpisah.
Inilah yang saya sarankan untuk menyelesaikan masalah:
Kemudian Anda dapat memindahkan logika yang bertanggung jawab untuk menangani param ke
UserWithParam
komponen dan meninggalkan logika dasar dalamUser
komponen. Apa pun yang Anda lakukanUser::ngOnInit
tidak akan berjalan lagi ketika Anda menavigasi dari / pengguna ke / pengguna / 123 .Jangan lupa untuk menempatkan
<router-outlet></router-outlet>
diUser
's Template.sumber
Jawaban yang disarankan di sini, termasuk jawaban yang diterima dari rerezz yang menyarankan menambahkan beberapa entri rute berfungsi dengan baik.
Namun komponen akan dibuat kembali ketika mengubah antara entri rute, yaitu antara entri rute dengan parameter dan entri tanpa parameter.
Jika Anda ingin menghindari ini, Anda dapat membuat pencocokan rute Anda sendiri yang akan cocok dengan kedua rute:
Kemudian gunakan pencocokan dalam konfigurasi rute Anda:
sumber
Dengan angular4 kita hanya perlu mengatur rute bersama dalam hierarki
Ini bekerja untuk saya. Dengan cara ini router mengetahui apa rute berikutnya berdasarkan parameter id opsi.
sumber
Berlari ke contoh lain dari masalah ini, dan dalam mencari solusi untuk itu datang ke sini Masalah saya adalah saya mengerjakan anak-anak, dan malas memuat komponen juga untuk mengoptimalkan beberapa hal. Singkatnya jika Anda malas memuat modul induk. Hal utama adalah saya menggunakan '/: id' di rute, dan keluhan tentang '/' menjadi bagian dari itu. Bukan masalah sebenarnya di sini, tetapi itu berlaku.
Perutean aplikasi dari induk
Rute anak dimuat malas
sumber
Saya tidak bisa berkomentar, tetapi mengacu pada: Angular 2 parameter rute opsional
pembaruan untuk Angular 6:
Lihat https://angular.io/api/router/ActivatedRoute untuk informasi tambahan tentang perutean Angular6.
sumber
Menghadapi masalah serupa dengan lazy loading, saya telah melakukan ini:
Dan kemudian di komponen:
Cara ini:
Rute tanpa
/
diarahkan ke rute dengan. Karena itupathMatch: 'full'
, hanya rute lengkap khusus tersebut yang dialihkan.Lalu,
users/:id
diterima. Jika rute yang sebenarnya adalahusers/
,id
adalah""
, jadi dalamngOnInit
dan bertindak sesuai; selain itu,id
adalah id dan melanjutkan.Komponen lainnya yang aktif
selectedUser
atau tidak terdefinisi (* ngIf dan hal-hal seperti itu).sumber