【VUE】監(jiān)聽頁面返回或移動端物理返回按鈕鍵

有一次在修改別人的代碼時,發(fā)現頁面一進來會加載兩次,導致要返回到上一頁面還要點兩次才能返回,找了原因,發(fā)現原來是axios發(fā)送了兩次請求(一次為請求方法為option,一次為正常請求),具體解釋請點查看,我一般用的是代理跨域,第一次遇到這種跨域處理,由于技術過渣不知道怎么改,只好想辦法控制返回事件實現點擊一次返回上一級(就是這么強硬 (~O~))

第二次更新,之前的使用onpopstate,沒有在頁面離開時候移除掉事件,導致其他頁面也觸發(fā),所以重新需要加下移除事件

//unit.js
// 存儲當前歷史記錄點,實現控制手機物理返回鍵的按鈕事件
export const pushHistory = () => {
  let state = { title: '', url: '' }
  window.history.pushState(state, state.title, state.url)
}
//index.vue
<script>
import { pushHistory } from '@/misc/utils' // 引入工具類
export default {
 mounted () {
   this.onpopstate()
  },
  methods: {
    // 監(jiān)聽歷史記錄點, 添加返回事件監(jiān)聽
    onpopstate () {
     pushHistory()
      // 給window添加一個popstate事件,攔截返回鍵,執(zhí)行this.closeViews事件,addEventListener需要指向一個方法
      window.addEventListener("popstate", this.closeViews, false);
    },
    closeViews () {
       this.$toast('退出程序')
    }
  },
  destroyed () { 
    // 當頁面銷毀必須要移除這個事件,vue不刷新頁面,不移除會重復執(zhí)行這個事件
    window.removeEventListener("popstate", this.closeViews, false);
  }
}
</script>
注意

使用了頁面緩存,是不會執(zhí)行destroyed,之前有同事就出現這個問題卡住了,如果用了頁面緩存的,可以使用路由離開監(jiān)聽替換destroyed

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • ??JavaScript 與 HTML 之間的交互是通過事件實現的。 ??事件,就是文檔或瀏覽器窗口中發(fā)生的一些特...
    霜天曉閱讀 3,696評論 1 11
  • Yahoo!的Exceptional Performance團隊為改善Web性能帶來最佳實踐。他們?yōu)榇诉M行了一系列...
    拉風的老衲閱讀 1,957評論 0 1
  • 前端開發(fā)面試題 面試題目: 根據你的等級和職位的變化,入門級到專家級,廣度和深度都會有所增加。 題目類型: 理論知...
    怡寶丶閱讀 2,686評論 0 7
  • 1、盡量減少HTTP請求次數 終端用戶響應的時間中,有80%用于下載各項內容,這部分時間包括下載頁面中的圖像、樣式...
    兔子不打地鼠打代碼閱讀 580評論 0 1
  • 引言:握手是和你的語言如影隨形的身體問候。----無名氏 握手,最基本的問候 無需語言觸覺我們就能注意到一個人。在...
    黃黃黃小姐閱讀 2,770評論 1 11

友情鏈接更多精彩內容