1

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

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

大多数关于这种行为的帖子都连接到我不使用的 vue-router。

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

我也尝试过“保持活力”但没有成功。

我在我的组件上放了一些详细的日志,以尝试在浏览器返回并且没有打印出来时捕获生命周期钩子......

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 ----> ')
},

任何的想法?

4

1 回答 1

6

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

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

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

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

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

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

但是,事实上,自动完成默认是“开启”的:

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

默认情况下启用持久性功能。将 autocomplete 属性的值设置为 off 会禁用此功能。

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

现在,如果用户单击页面上的链接,然后使用“返回一页”按钮向后导航,则存在 v-model 绑定字段。

于 2018-10-22T10:49:13.490 回答