forms - 浏览器返回页面时 Vue.js 表单数据绑定(bind)丢失

标签 forms vue.js vuejs2 vue-component v-model

这是我正在做的: 我有一个表单集组件,它通过 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/

相关文章:

php - 如何从下拉列表中获取值并将其以不同的排列插入到MySQL表中?

css - 如何在 Vue.js 3 中动态绑定(bind)样式属性?

vue.js - Vue js 为一个元素绑定(bind)多个样式属性

javascript - Vue.js - 在组件内部使用 unicode 语法渲染 Font Awesome 不起作用

javascript - 在文本字段中显示下拉列表的选定值 (javascript)

php - 提交(); Mac 的 IE/Safari/FF 中的问题

javascript - VueX 通过提交从操作更新状态

javascript - Vuejs vee validate 验证所有表单输入

javascript - 停止制作表单以重新加载页面

javascript - Vue.js 使用 v-if 语句对列表进行小计