網站搜尋

typescript - 在 Angular 應用中,Chrome 瀏覽器的返回按鈕不會刷新頁面


我使用上述代碼嘗試在按下返回按鈕時強制刷新,但它只在 Chrome 上不刷新頁面。我無法弄清代碼出了什麼問題。有時它在本地有效,但在生產環境中從不生效。

@HostListener('window:beforeunload', ['$event'])   onPopStateBack() {     
   console.log("Back Button detected!");     
   window.location.reload();  
}   

@HostListener('window:popstate', ['$event'])   onPopState(event: any) {     
   console.log("Back Button detected!");     
   window.location.reload();   
}

答案#1

我會建議使用 Angular 的 Router 服務。在我看來,這似乎是更『Angular』的做法。在你的建構函數中注入 Router 服務,然後訂閱它的事件。屬性 navigationTrigger 用於識別觸發導航的事件,在你的情況下,我們正在尋找返回按鈕,所以我們只需要 'popstart'。

constructor(private router: Router){}

ngOnInit(){
   this.refreshOnBackButtonClick();
}

refreshOnBackButtonClick(): void {
   this.router.events.subscribe((event: NavigationStart) => {
     if (event.navigationTrigger === 'popstate') {
       console.log('popstart');
       window.location.reload();
     }
   });
}

注意:這個訂閱也會在瀏覽器中按下前進按鈕時觸發事件。所以如果你只想在使用者點擊返回按鈕時刷新,就必須判斷是觸發了哪個事件。附註:事件對象中還有其他屬性可以幫助你判斷是否需要刷新。