刷新页面仍保留当前数据显示

刷新页面仍保留当前数据显示

背景:若当前该页面有数据(有任务),要求刷新保留当前的数据(任务);关闭当前会话(页面)或完成任务后则把当前任务结束(清空),页面为空数据页。
保留数据一般用到:

1. localstorage
保存数据,长期有效直到过期(设置了过期时间)

 localStorage.setItem(keyname, value); //key and value should be string.
 localStorage.getItem(keyname);

2. sessionStorage
当前会话有效,同一个域名(如http://www.baidu.com/id=1234和http://www.baidu.com/search=ddsddfaf)下打开的tab都有当前会话的数据。(图片这里打开的两个页面为两个tab)
在这里插入图片描述

当前域名下的所有tab都关闭了,才算失效。

 sessionStorage.setItem(keyname, value); //key and value should be string.
 sessionStorage.getItem(keyname);

3. cookie
在客户端存储数据,移动端开发或者单纯的html页面想要存放值在下次打开页面还有效的时候,可以用cookie。
cookie的大小是受限的,并且每次请求一个新的页面的时候cookie都会被发送给服务端,让服务端返回cookie存储的sessionid的相关数据,这样无形中浪费了带宽,且不安全;另外cookie还需要指定作用域,不可跨域调用。

此处背景要求当前会话若有任务则保留数据,用sessionStorage更加合适。

1.刷新时检验当前页面是否有任务,此处通过有无生成任务id来判断是否有任务,若有任务,存储当前会话的任务id,当组件加载时若sessionStorage中有id则拿id重新请求数据(任务相关的数据,任务详情/任务列表)。
注意⚠️:在重新请求获取数据时,需要刷新组件(刷新组件看下一篇文章),否则会有旧数据存在,可能会导致组件渲染混乱/显示错误的旧数据。

  async getData() { //请求task详情和列表
    try {
      await this.getDetail();
      await this.getOrderList();
    } catch (error) {
      this.$message.error(error);
    }
  }
  async init() {//初始化数据
    this.taskId = sessionStorage.getItem('task_id') || '';
    if (this.taskId) {//如果有id则请求task相关数据
      await this.getData();
    } else {//没有则置空(更保险),也可以不置空,通过组件绑定的key属性的变化重新更新组件。
      this.taskData = [];
      this.taskDetail = {};
    }
  }
  
  private mounted() {
    this.init();
    window.onbeforeunload = () => {//window.onbeforeunload,在页面刷新前执行
     if (this.taskId) {
        sessionStorage.setItem('task_id', this.taskId);
      }
    };
  }

2.点击complete按钮完成任务,跳转空白数据页,等待新的任务流程。

    const routerData = this.$router.resolve({
      name: 'task',
      query: {
        tabs: `${(this.infoValues as any).task_type}`,//用query记录某些需要保留的数据(此处是记录当前所在的tab(el-tab组件中的tab),通过获取tabs的名字设置activeTabName默认跳转到刚刚的tab)
      },
    });
    sessionStorage.setItem('task_Id', '');//清空当前任务的存储
    window.open(routerData.href, '_blank');//新开一个窗口,并跳转到新页面
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Vue是一种流行的JavaScript框架,用于构建交互式的前端应用程序。Vue的一个特点是可以实现无刷新页面状态保留的功能,即刷新页面保留当前页面状态。以下是一种常用的实现方法: 1. 使用Vue的路由机制:Vue提供了vue-router插件,可以用于管理前端路由。在vue-router中,可以定义路由和对应的组件,并通过路由导航切换不同的组件刷新页面后,由于路由信息仍然保存在浏览器地址栏中,可以通过重新加载对应的路由和组件保留当前页面状态。 2. 使用浏览器的本地存储:Vue可以通过浏览器的本地存储机制(如localStorage或sessionStorage)将当前页面的数据存储在浏览器中。当页面刷新时,可以从本地存储中获取数据并重新渲染页面,从而保留当前页面状态。 3. 使用Vue的全局状态管理:Vue提供了Vuex插件,用于管理全局的状态。通过将页面状态存储在Vuex的state中,在页面刷新后再次加载时,可以从Vuex中获取保存的状态数据,并在组件中重新渲染页面。 需要注意的是,以上方法都是基于前端的实现,即刷新页面后重新加载前端资源并重新渲染页面。如果涉及到后端数据的状态保留,还需要通过后端的持久或缓存机制来实现。 ### 回答2: 在Vue中刷新页面保留当前页面状态,可以通过以下步骤实现: 1. 使用Vue Router来进行路由管理,确保每个页面都有一个对应的路由路径。 2. 在Vue组件中,使用Vue Router的导航守卫(Navigation Guards)中的`beforeRouteLeave`钩子函数。通过在该函数中存储当前页面的状态数据。 例如,在`beforeRouteLeave`函数中,可以使用`this.$store.state`来获取并存储当前组件的状态数据。 3. 在进行页面刷新或路由跳转时,可以使用`window.localStorage`或`sessionStorage`对象将当前页面的状态数据存储到浏览器本地存储中。 例如,在`beforeRouteLeave`函数中,可以使用`window.localStorage.setItem('pageState', JSON.stringify(this.$store.state))`来将当前页面状态数据存储到localStorage中。 4. 在页面加载完成时,可以使用Vue Router的导航守卫中的`beforeRouteEnter`钩子函数来获取并还原之前保存的页面状态数据。 例如,在`beforeRouteEnter`函数中,可以使用`this.$store.commit('updateState', JSON.parse(window.localStorage.getItem('pageState')))`来将之前存储的状态数据重新赋值给当前组件的状态。 通过以上步骤,即可实现在Vue中刷新页面保留当前页面状态的效果。当页面刷新或路由跳转时,会将当前页面的状态数据存储到浏览器本地存储中,再次加载页面时则可以将之前保存的状态数据还原给组件。这样就能够保留页面的状态并避免数据丢失。 ### 回答3: 在Vue中,如果要实现刷新页面保留当前页面状态,可以借助浏览器的本地存储技术进行操作。 一种常见的做法是在Vue组件的created或mounted钩子函数中,通过localStorage或sessionStorage将数据存储在浏览器中。可以将需要保留数据进行序列处理,然后使用setItem方法将其存储到localStorage或sessionStorage中。 例如,在需要保留状态的组件中,可以写入以下代码: ```javascript export default { created() { // 获取存储在localStorage中的状态数据 const stateData = localStorage.getItem('stateData'); // 判断是否存在状态数据 if (stateData) { // 使用JSON.parse方法将序列的状态数据还原成对象 const state = JSON.parse(stateData); // 将状态数据重新赋值给组件内的数据 this.someData = state.someData; // 其他需要保留数据字段类似地进行赋值 } }, beforeDestroy() { // 在组件销毁前,将当前的状态数据存储到localStorage中 localStorage.setItem('stateData', JSON.stringify({ someData: this.someData, // 其他需要保留数据字段类似地存储 })); } } ``` 通过以上代码,在组件创建时,会自动从localStorage中获取之前存储的状态数据并重新赋值给组件内的数据字段。而在组件销毁前,会将当前状态数据存储到localStorage中。 这样在刷新页面后,通过获取localStorage中的数据,即可将之前的状态数据重新赋值给组件,从而达到刷新页面保留当前页面状态的效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值