如何检测页面在vue上刷新?

Suc*_*Man 6 javascript page-refresh vue.js vue-component vuetify.js

我尝试这样:

created() {
      window.addEventListener('beforeunload', function(event) {
         event.returnValue = 'Write something'
         this.$router.push('/')
      })
    },
Run Code Online (Sandbox Code Playgroud)

像这样的消息:

在此处输入图片说明

如果我点击取消,它会取消

如果我单击重新加载,它将重新加载页面。它重新加载到详细信息页面

我希望当用户单击重新加载按钮时,它将重新加载页面。但将页面重新加载到主页

我该怎么做?

更新

我的路由器是这样的:

import Vue from 'vue'
import Router from 'vue-router'
import Home from './views/Home.vue'
...

Vue.use(Router)

export default new Router({
  mode: 'history',
  base: process.env.BASE_URL,
  routes: [
    {
      path: '/',
      name: 'home',
      component: Home
    },
    ...
  ]
})
Run Code Online (Sandbox Code Playgroud)

我的环境:dev

我的项目正在使用 vuetify

cha*_*ans 7

您可以将创建的Vue 生命周期钩子添加到写入新 Vue 实例的 main.js 中。

这是正确的位置,当您刷新应用程序时,它会再次重新初始化完整的 Vue 应用程序。

如果您在浏览器中使用“后退”或“前进”,或者

this.$router.go(-1)
Run Code Online (Sandbox Code Playgroud)

不被视为刷新,vue应用程序的状态被保留

像这样使用,这里的 page3 是浏览器当前页面,如果你想刷新,它会提示确认或重新加载此站点。如果是,它会重新加载到主页(第1页),否则它会停留在同一页面

在main.js中

import Vue from 'vue'
import App from './App'
import router from './router'
import store from './store'

Vue.config.productionTip = false


new Vue({
  el: '#app',
  router,
  store,
  components: { App },
  template: '<App/>',
  created() {
    if (performance.navigation.type == 1) {
      if(this.$route.path == '/page3') {
        if (confirm('Reload site?. Change you made may not be saved.')) {
          this.$router.push({path: '/page1'})
        } else {
          console.log('reload page now');
      }
    }          
   }
  }
})
Run Code Online (Sandbox Code Playgroud)

更新代码: 根据问题如何检测页面重新加载,上述逻辑工作正常

但是,如果用户想要阻止页面重新加载,并在刷新或重新加载页面之前要求用户确认,下面的代码就是答案。

以下逻辑是,如果用户在 page3 中尝试刷新或重新加载页面,则提示用户确认并重定向到主页(page1),如果用户取消刷新,则不会重新加载并保留页面的状态页

在main.js中

import Vue from 'vue'
import App from './App'
import router from './router'
import store from './store'
Vue.config.productionTip = false


new Vue({
  el: '#app',
  router,
  store,
  components: { App },
  template: '<App/>',
  created() {
    var self = this;
    window.onbeforeunload = function (e) {
      if(self.$route.path  == "/page3") {
        e = e || window.event;
        //old browsers
        if (e) {e.returnValue = 'Changes you made may not be saved';}
        //safari, chrome(chrome ignores text)
        return 'Changes you made may not be saved';
      } else { 
        return null;
      }
    };
    if (performance.navigation.type == 1) {
      if(this.$route.path == '/page3') {
          this.$router.push({path: '/page1'})
        } else {
          console.log('reload page without redirect');
      }
    }
  }
})
Run Code Online (Sandbox Code Playgroud)