Vue.js 浏览器返回页面时表单数据绑定丢失

Vue.js form data binding lost when browser going back to the page

这是我正在做的事情: 我有一个表单集组件,它通过 ajax 获取数据以填充表单集。 用户可以从表单修改这些数据并提交。

问题:这很好用。但是,我注意到如果我导航到另一个页面然后点击浏览器 "go back one page" 按钮,表单就在那里(模板中的 DOM)但是是空的。 v-model 输入字段中不再有数据绑定...

大多数关于此行为的帖子都与我不使用的 vue-router 有关。

我认为它可能必须处理生命周期挂钩... 实际上,在我的组件上,我在 "mounted" 时获取数据。 但是,如果是这样,哪个生命周期?

我也试过"keep-alive"没成功。

我在我的组件上放了一些详细的日志,试图在浏览器返回时捕获生命周期挂钩,并且 none 打印了它们...

beforeCreate: function() {
    console.log('---- BEFORE CREATE ----> ')
},
created: function() {
    console.log('---- CREATED ----> ')
    this.getModelObjects();
},
beforeMount: function() {
    console.log('---- BEFORE MOUNT ----> ')
},
mounted: function() {
    console.log('---- MOUNTED ---->')
    this.getModelObjects();
},
beforeUpdate: function() {
    console.log('---- BEFORE update ----> ')
},
updated: function() {
    console.log('---- UPDATED ----> ')
},
beforeDestroy: function() {
    console.log('---- BEFORE DESTROY ----> ')
},
destroyed: function() {
    console.log('----  DESTROYED ----> ')
},

有什么想法吗?

好的,我用最简单的方法解决了这个问题!

实际上,使用localStoragehttps://fr.vuejs.org/v2/cookbook/client-side-storage.html)并不能解决问题。

无论如何,它需要绑定到生命周期钩子才能被触发。因此,由于我已经使用 Axios 将后端数据库上的这些数据同步,这会增加冗余的复杂性并最终导致同样的问题。

我还注意到只有 v-model 字段是相关的。 {{ var }} 不是。所以,我最终认为这真的与表格有关。

相反,我在表格中使用了 autocomplete="on"

<form method="post" autocomplete="on">
.....
</form>

但是,事实上,默认情况下自动完成是 "on" :

https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/autocomplete

The persistence feature is enabled by default. Setting the value of the autocomplete attribute to off disables this feature.

我不记得为什么,但我在我的表格中使用了 autocomplete="off" :-( ... 这可能就是为什么我没有看到太多关于它的帖子...

现在,如果用户单击页面上的 link,然后使用 "go one page back" 按钮向后导航,v-model 绑定字段就在那里。