Vue.js form data binding lost when browser going back to the page(浏览器返回页面时,Vue.js 表单数据绑定丢失)
问题描述
Here is what I am doing : I have a form set component that fetch data through ajax to populate the form set. The user may modify those datas from the form and submit.
Problem : This work well. However, I noticed that if i navigate to another page and then hit the browser "go back one page" button, the form is there (the DOM in the template) but empty. There is no data bound in v-model input fields anymore...
Most posts about this behavior are connected to vue-router, that I do not use.
I think it might have to deal with lifecycle hooks... Actually, on my component, I fetch the data when "mounted". But, if so, which lifecycle ?
I also tried "keep-alive" without success.
I put some verbose log on my component to try to catch the lifecycle hook when browser going back and none of them printed...
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 ----> ')
},
Any idea?
OK, I solved this problem in the most easiest way possible!
Actually, using localStorage
(https://fr.vuejs.org/v2/cookbook/client-side-storage.html), would not solve the problem.
In anyway, it needs to be tied to a lifecycle hook in order to be triggered. Therefore, as I already sync those datas on a backend database with Axios, this would add redundant complexity and end up with the same problem.
I also noticed that only v-model fields where concerned. {{ var }} were not. So, I ended up thinking this was really related to forms.
Instead, I used autocomplete="on"
in my forms.
<form method="post" autocomplete="on">
.....
</form>
But, in fact, autocomplete is "on" by default :
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.
I don't remember why, but I used autocomplete="off"
in my forms :-( ...
This might be why I don't see much posts about it...
Now, if a user click to a link on the page, and then navigate backward with the "go one page back" button, v-model binded fields are there.
这篇关于浏览器返回页面时,Vue.js 表单数据绑定丢失的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:浏览器返回页面时,Vue.js 表单数据绑定丢失
基础教程推荐
- 动态更新多个选择框 2022-01-01
- 在 JS 中获取客户端时区(不是 GMT 偏移量) 2022-01-01
- 悬停时滑动输入并停留几秒钟 2022-01-01
- 响应更改 div 大小保持纵横比 2022-01-01
- 在for循环中使用setTimeout 2022-01-01
- Karma-Jasmine:如何正确监视 Modal? 2022-01-01
- 当用户滚动离开时如何暂停 youtube 嵌入 2022-01-01
- 我什么时候应该在导入时使用方括号 2022-01-01
- 角度Apollo设置WatchQuery结果为可用变量 2022-01-01
- 有没有办法使用OpenLayers更改OpenStreetMap中某些要素 2022-09-06