2016-07-04 138 views
6

我使用查詢參數導航到我的應用中的某個頁面。 後,我得到我想刪除它的URL參數,理想我想有這樣的:從queryParams angular 2中刪除參數

let userToken: string; 
    this.sub = this.router 
     .routerState 
     .queryParams 
     .subscribe(params => { 
     userToken = params['token']; 
     params['token'].remove(); 
     }); 

但顯然remove函數不存在。有人有另一種選擇嗎?

+0

來自哪裏,查詢字符串中刪除?或僅來自'params'對象? – dfsq

+0

從params對象,以便它不會再顯示在URL中。 –

+0

將其更改爲不可讀的格式比刪除它好。 – micronyks

回答

24

以防萬一找到這個線程(就像我做的那樣)。我有在查詢字符串(/ login?jwt = token)中收到JWT令牌的場景。我需要獲取該令牌(並將其存儲等),但需要確保它已從URL中安全地移除。重新加載登錄路由(通過使用this.router.navigate(['login'])在principe工作,但是,用戶然後可以使用瀏覽器後退按鈕,基本上重放令牌登錄。

我解決了這個使用導航而是由DI'ing「位置」服務(從@角/公共端),該服務具有「replaceState」的方法,可以完全消除從歷史上令牌作爲WEL從URL

this.location.replaceState('login') 

希望幫助別人。

+0

哦,是啊!我很喜歡從後端向前端發送令牌JWT,它看起來不僅僅是我的問題。感謝您的回答 :) – Mariusz

1

我使用路由器方法navigateByUrl

備用DOC:Angular documentation

請記住,你給它的路徑是絕對的處理。此方法不能使用相對組件路由。

我的用途是我有一個組件作爲auth事件的外部回調,例如重置密碼和電子郵件驗證。一旦操作完成,任何導航行動需要時會發生通過router.navigateByUrl(path)

+0

這不提供解決方案。您需要一個獲取當前路由/ url的好方法,並從中刪除查詢參數(據我所知,此時此刻在Angular2中不存在)。 – Jakub

+0

我還原了負面投票,因爲回到當天,router.navigateByUrl()是刪除queryParams的唯一選項。這是Angular2 RC4和更舊版本中的一個bug。但是,這種方法現在已經不再適用於刪除查詢參數,因爲您現在可以使用router.navigate()修改它們。 –

2

UPDATE沒有必要添加queryParams在RC6了。

不知道這是否是這樣:

路由與查詢參數組件後,這個組件中的其他所有網址包含查詢自動PARAMS。任何時候當你導航到另一個網址時,查詢參數就會保留。

如果是這樣,一個可能的解決辦法是在查詢參數的html標記

<a [routerLink]="['/abcd']" [queryParams]="{}"> 

如果不是,其實我也有興趣在回答:P

+0

這個工程!可能是一個痛苦,但是將其添加到您的每一個鏈接都有很多。但現在這是我猜想的最佳解決方案。 –

+0

這不應該是默認的行爲,但在目前(從RC4開始)它看起來像是......我發現它很糟糕。 – dudewad

0

HTML5包括history.pushState API,它允許您添加歷史條目並更改當前顯示在瀏覽器中的URL。 (操縱瀏覽器歷史)

window.history.pushState('', 'title', '/expected-url');

您可以使用此行代碼在你Angular2應用。這隻會改變應用程序的URL而不是狀態。 (結果查詢參數從給定的url中刪除)

+0

感謝James的編輯。 –

2

我一直在尋找這樣的答案時,我想刪除從的access_token URL參數。如果你只是想刪除一個參數並保留其他參數。需要出於某種原因

setTimeout(() => { 
    let urlWithoutAccessToken = this.router.url.replace(new RegExp('.access_token=' + idToken), ''); 
    this.router.navigateByUrl(urlWithoutAccessToken); 
}, 0); 

的setTimeout的,該navigateByUrl沒有沒有它的工作。

0

勢在必行的方法,但清潔:

this.router.navigate(['.'], { relativeTo: this.route, queryParams: {} });

0

您可以指定null到特定queryParam:

this.router.navigate([], {queryParams: {page: null}, queryParamsHandling: 'merge'});