繁体   English   中英

在没有 vue-router 的情况下使用 Vuejs 收听 onpopstate

[英]Listen to onpopstate with Vuejs without vue-router

我正在使用带有 laravel 的 vue.js,我正在使用带有 laravel 刀片文件的 vue 组件。 当我按下后退导航按钮转到上一页时,我想重新加载页面。 我有这个代码的目的:

created() {
       window.onpopstate = function(event) {
       location.reload();
    };

这是行不通的。 我可以使用浏览器的后退按钮返回,但没有重新加载。 我怎样才能达到这个结果? 同样,我没有使用 vue-router。 我使用laravel的路由来加载刀片文件,刀片文件包含vue文件。 刀片文件:

@extends('layouts.app')
@section('content')
  <vue-component></vue-component>
@endsection

我假设您的问题是浏览器在后退按钮上保持状态。 这是与基于 chrome 的浏览器相关的 vue 中的一个已知错误, 这里是有关它的更多信息 要在不重新加载页面的情况下解决此问题,您需要像这样在 pageshow 事件中初始化 Vue:

const initVue = () => {
    return new Vue({
        el: '#app',
        store
    });
   }
    const app = window.addEventListener('pageshow', () => {
        initVue();
    })

但是要在 Safari 中解决这个问题,您必须重新加载页面(将它应用到您的主布局刀片中)。

  (function () {
            window.onpageshow = function (event) {
            if (event.persisted) {
                window.location.reload();
                }
            };
        })();

或者,如果您真的想通过在使用后退按钮时重新加载页面来解决此问题,那么您需要为您的组件使用这样的方法,或者您可以在主布局刀片中使用它以将其应用于任何地方:

methods: {
    checkBackButton: function() {
            if (
                window.performance &&
                window.performance.navigation.type ===
                    window.performance.navigation.TYPE_BACK_FORWARD &&
                this.type === "main"
            ) {
                window.location.reload();
            }
        }
},

mounted() {
   this.checkBackButton();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM