返回部落格

搭配 Angular Router 使用查詢參數

搭配 Angular Router 使用查詢參數

介紹

在建置應用程式時,可能會遇到需要傳入一些引數或參數來描述路由行為的情境。在 Angular 中,這些被稱為 查詢 參數,且它們是選填的。查詢參數不應與一般的 路由 參數混淆,後者是必填參數,且僅與單一路由綁定。

為了釐清路由參數與查詢參數之間的差異,請想像您正在建置一個儲存產品的應用程式。您可以擁有一個使用以下項目來開啟特定產品的路由: product_id。您也可以指定一個查詢參數: read_only。當 read_only 被設定為 true 時,使用者只能檢視該記錄;而當 read_onlyfalse 時,使用者也可以編輯該記錄。如此一來,僅使用單一路由,就能同時處理編輯與檢視的使用案例。在這裡, product_id路由參數,而選填的 read_only 則是 查詢 參數.

先決條件

若要完全理解本文,需要熟悉使用 Angular 建置應用程式。具備 Angular Router、RouterLink 和 ActivatedRoute 的使用經驗也會有所幫助。

使用 Router.navigate 傳遞查詢參數

如果您正在使用 Router.navigate 來在路由之間進行導覽,請使用 queryParams 來傳送查詢參數。

在上述範例中,如果我們希望訪客看到按熱門程度排序的產品列表,我們將使用以下程式碼:

使用此程式碼後,URL 將變為:

然而,在某些情境下,我們在導覽時可能需要傳遞多個參數。例如,如果我們想按熱門程度以及價格來排序產品,我們可以使用以下程式碼:

這一次,URL 將變為以下內容:

以上介紹了如何使用以下項目來設定查詢參數: queryParams.

使用 queryParamsHandling 防止查詢參數遺失

在路由之間進行導覽時,參數往往會遺失。假設我們傳入了一個引數 arg0,在後續進行路由時它將不會被傳遞。我們可以使用 queryParamsHandling 並將其值設定為 preservemerge.

在上述範例中,假設我們想將訪客引導至 brands 頁面,從 product 頁面並帶有路由參數 { order: 'popular' },同時保留路由參數。若要這樣做,我們可以使用 queryParamsHandling 並將其設定為 preserve :

這將使 URL 看起來像:

接下來,假設我們想保留上一個路由的查詢參數 { order: 'popular' }  同時新增參數 { price: 'high-to-low' }。我們可以將 queryParamsHandling 設定為 merge:

使用上述程式碼,URL 將變為:

在此,我們總結了使用 queryParamsHandling 來保留或合併查詢參數。

使用 RouterLink 傳遞查詢參數

考慮到我們之前的連結,如果我們想使用 RouterLink 指令進行導覽,我們需要使用 queryParams 傳遞查詢參數,如下所示:

請注意我們是如何將物件傳遞給 queryParams (使用單向繫結)。我們也可以將整個物件作為 queryParams .

傳遞。此外,如果我們想在後續導覽中繼續攜帶這些查詢參數,我們可以使用 queryParamsHandling 選項。queryParamsHandling 的可能選項有 merge 以及 preserve:

在這裡,我們已經看到了如何傳遞 queryParams 以及如何使用 queryParamsHandlingRouterLink.

中處理參數

到目前為止,我們已經學習了如何在路由中傳遞查詢參數。這些參數是可選的,用於向目標頁面傳遞某些資訊。發送參數只是其中一部分,但從 URL 中讀取參數並使用它們也是必要的。

在 Angular 中,我們使用 ActivatedRoute 類別來讀取路由查詢參數。 ActivatedRoute 具有一個名為 queryParams 的 Observable 屬性,用以獲取目前 URL 的參數。

假設我們正在處理以下 URL:

要在程式碼中存取查詢參數 order ,我們使用以下程式碼:

在主控台(console)中,我們將會看到 order 查詢參數的值為 popular 印出。如果我們有多個查詢參數,我們可以使用 queryParamMap 屬性,它會返回一個 observable paramsMap 物件。

如果我們有包含多個查詢參數的 URL,例如:

我們可以使用以下程式碼來存取這些查詢參數:

使用 物件展開運算子 ,我們得到以下結果:

最後,您應該能夠理解如何從產生的路由中存取查詢參數。

結論

在本教學中,我們探討了查詢參數與路由參數之間的差異。我們也研究了如何跨路由將引數作為查詢參數傳遞,並在頁面上使用 queryParams 以及 queryParamsHandling 搭配 Router.navigate 以及 RouterLink 重新檢索它們。我們也學習了如何處理 queryParams 以及 queryParamMap 搭配 ActivatedRoute.

Angular 的底層需要 JavaScript。如果您想進一步了解 JavaScript 的知識,可以參考以下部落格文章:

祝您編程愉快!

author

Shreyas Patil

作者 · CloudSigma

Preslav Dobrev 是 CloudSigma 的創意設計師,專注於透過傳統與創新行銷渠道建立一致的企業形象。他擅長將藝術願景與策略行銷相融合,創造具有影響力的品牌敘事。

留言

目前尚無留言。成為第一個留言的人吧。