「这是我参与11月更文挑战的第24天,活动详情查看:2021最后一次更文挑战」
input 中的数据应该保存在哪儿?
1 场景描述
Vue 项目中某个页面使用router.push方法进行路由跳转,并携带参数:id
this.$router.push({
name: "info",
params: { id: this.id }, // 假设 this.id = 'ds'
});
目标页面中的搜索框 value 值会从路由参数获取
this.form = {
id: this.$route.params.id
}
现在我们刷新页面,会发现搜索框中的 value 值为空 这是因为我们没有在路由路径中使用“动态路径参数”
// 我们是这么写的
const routes = [
{ path: '/info', component: Info }
]
// 没有用动态路径参数
const routes = [
{ path: '/info/:id', component: Info }
]
这会导致刷新页面时,this.$route.params.id重置为空
现在我们的需求是:在刷新页面时,搜索框中的 id 不变
2 解决方案
2.1 使用动态路径参数
const routes = [
{ path: '/info/:id', component: Info }
]
现在,即使页面刷新,只要 URL 未发生变化,this.$route.params.id的值始终不变
2.2 使用 localStorage
只读的
localStorage属性允许你访问一个Document源(origin)的对象Storage;存储的数据将保存在浏览器会话中。
localStorage类似sessionStorage,但其区别在于:存储在localStorage的数据可以长期保留;而当页面会话结束——也就是说,当页面被关闭时,存储在sessionStorage的数据会被清除 。 我们可以在路由跳转的时候,使用 localStorage 将 id 存储在本地
localStorage.setItem('id', this.id)
并且目标页面搜索框的 value 不去this.$route.params中获取,而去本地存储中获取
this.form = {
id: localStorage.getItem('id')
}
3 场景抽象
这个问题的本质是如何存储某些值,使得在页面刷新时这些值不会丢失 通常我们可以采用这些方法:将值拼接到 URL、存储在本地、或者使用 vuex 保存等等,根据具体业务场景作出选择