这是我正在做的: 我有一个表单集组件,它通过 ajax 获取数据以填充表单集。 用户可以从表单修改这些数据并提交。
问题:这很好用。但是,我注意到如果我导航到另一个页面然后点击浏览器的“返回一页”按钮,表单就在那里(模板中的 DOM)但是是空的。 v-model 输入字段中不再有数据绑定(bind)...
大多数关于此行为的帖子都与我不使用的 vue-router 相关。
我认为它可能必须处理生命周期钩子(Hook)...... 实际上,在我的组件上,我在“安装”时获取数据。 但是,如果是这样,是哪个生命周期?
我也尝试过“keep-alive”但没有成功。
我在我的组件上放了一些详细的日志,试图在浏览器返回时捕获生命周期钩子(Hook),但没有打印出它们......
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 ----> ')
},
有什么想法吗?
最佳答案
OK,我用最简单的方法解决了这个问题!
实际上,使用 localStorage
( https://fr.vuejs.org/v2/cookbook/client-side-storage.html ) 并不能解决问题。
无论如何,它需要绑定(bind)到生命周期钩子(Hook)才能被触发。因此,由于我已经使用 Axios 将后端数据库上的这些数据同步,这会增加冗余的复杂性并最终导致相同的问题。
我还注意到只关注 v-model 字段。 {{ var }} 不是。所以,我最终认为这确实与表单有关。
相反,我在表单中使用了 autocomplete="on"
。
<form method="post" autocomplete="on">
.....
</form>
但实际上,自动完成功能默认是“开启”的:
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"
:-( ...
这可能就是为什么我没有看到太多关于它的帖子......
现在,如果用户单击页面上的链接,然后使用“返回一页”按钮向后导航,v-model 绑定(bind)字段就在那里。
关于forms - 浏览器返回页面时 Vue.js 表单数据绑定(bind)丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52762493/