新建useNavigationPrompt.ts

import { onBeforeUnmount, onMounted } from 'vue'

export function useNavigationPrompt(message: string): void {
  const handleBeforeUnload = (e: BeforeUnloadEvent) => {
    e.preventDefault()
    e.returnValue = message
    return message
  }

  const handlePopState = () => {
    // eslint-disable-next-line no-alert
    window.confirm(message)
  }

  onMounted(() => {
    window.addEventListener('beforeunload', handleBeforeUnload)
    window.addEventListener('popstate', handlePopState)
  })

  onBeforeUnmount(() => {
    window.removeEventListener('beforeunload', handleBeforeUnload)
    window.removeEventListener('popstate', handlePopState)
  })
}

使用方法

import { useNavigationPrompt } from '~/hooks/useNavigationPrompt'
useNavigationPrompt('你确定要离开这个页面吗?')
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐