近期在 Vue 專案中於編輯頁面,要判斷使用者是否離開或是關閉頁面,並跳出提示訊息。這邊筆記下原理和程式碼。
內容
1. 透過 Vue-Router 或是一般連結所造成的切換 – 使用 beforeRouteLeave 加上 window.confirm 來確認
2. 頁面關閉的話則透過在 mounted 階段將一個有 return 的函式給 window.onbeforeunload,並搭配 beforeDestroy 階段將其設成 null,你就可以在關閉視窗時,呼叫到 beforeRouteLeave 的方法
程式碼
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
<script lang="ts"> import Vue from 'vue' export default Vue.extend({ name: 'Demo', beforeRouteLeave (to, from, next) { const acceptToLeave = window.confirm('變更尚未儲存,確定要離開嗎?') acceptToLeave ? next() : next(false) }, async mounted (this:any) { try { window.onbeforeunload = () => { return '' } } catch (err) { console.log(err) } }, beforeDestroy () { window.onbeforeunload = null } }) </script> |