我正在使用具有真值的 skipLocationChange 屬性,因此我可以在瀏覽器中隱藏 URL。它作業正常。但是對于我的一個功能,我正在使用 CanDeactivate 守衛,因此我可以警告用戶在離開當前頁面之前保存更改。我只是顯示一個彈出視窗以獲取用戶的確認。如果用戶單擊“確定”,那么他將毫無問題地導航到目標頁面,而且該 URL 也隱藏在瀏覽器中。但是,如果用戶單擊“取消”按鈕,那么他將停留在同一頁面上,但問題在于當前頁面 URL 被附加到瀏覽器中的基本 URL。我不想要的。我只希望 URL 也與取消案例一起隱藏。
我還將鏈接附加到使用 stackblitz 創建的示例專案: https ://stackblitz.com/edit/angular-ivy-uqq8sg?file=src/app/app.component.html
在示例專案中產生問題的步驟:
- 通過單擊用戶詳細資訊鏈接打開用戶詳細資訊頁面。
- 填寫用戶詳細資訊表格并單擊第一頁鏈接,然后將顯示一個確認視窗,單擊取消。
- 用戶將停留在同一頁面上,但它還會在瀏覽器中附加用戶詳細資訊 URL。
注意:這個問題Router guard skip location change沒有給出我的問題的答案,因為它使用的是 canActivate 守衛,而不是 canDeactivate 守衛。在 canActivate 守衛中,我們使用 router.navigateByURL 方法,我們可以將 skipLocationChange 設定為真值,但在 canDeactivate 守衛中我們不使用 router.navigateByURL 方法來取消導航
提前致謝。
uj5u.com熱心網友回復:
代碼取自這里
我改變了什么:
在組件中,回傳純值,而不是觀察者,所以在守衛中我可以直接使用它
return true; //return of(true)
在守衛中,通過路由器服務導航而不是僅僅回傳 false/true
this.router.navigate([state.url], { skipLocationChange: true });
分叉堆疊閃電戰
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/537240.html
