前端如何给特定的组件设置缓存并处理定位问题?

前端如何给某些组件设置缓存并处理定位?

最近有个需求就是a=>b,b页面处理了些操作,返回a页面时,

b页面若有操作则a页面需要刷新并定位到上次点击的位置,b若没有操作则无需刷新直接定位上次点击的位置

1.首先在store中存储缓存的组件

javascript 复制代码
vuex代码:
const cached = {
  state: {
    cachedPage: []
  },
  getters: {
    getCachedPage (state) {
      return state.cachedPage;
    }
  },
  actions: {
    addCached ({ commit }, view) {
      console.log('view', view)
      commit('ADD_CACHED', view)
    },
    delCached ({ commit }, view) {
      commit('DEL_CACHED', view)
    }
  },
  mutations: {
    ADD_CACHED: (state, view) => {
      if (state.cachedPage.includes(view.name)) return;
      state.cachedPage.push(view.name);
    },
    DEL_CACHED: (state, view) => {
      const index = state.cachedPage.indexOf(view.name);
      index > -1 && state.cachedPage.splice(index, 1);
    },
  },
}
export default cached

2.在app.vue组件中使用keep-alive缓存组件
加粗样式

javascript 复制代码
<keep-alive :include="getCachedPage">
    <router-view></router-view>
 </keep-alive>
<script >
import { mapGetters } from 'vuex'; 
export default {
  name: 'App',
  computed: {
    ...mapGetters(['getCachedPage']),
  }, 
</script>

3.在需要缓存的组件中,使用组件内的守卫方法,代码如下:
注意:name不要写错了

javascript 复制代码
export default {
  name: 'home',
  beforeRouteEnter(to, from, next) {
    console.log(from);
    store.dispatch('addCached', to);
    next((vm) => {
      vm.routeName = to.name;
    });
  },
  beforeRouteLeave(to, from, next) {
    console.log(to, from);
    //记录上次点击的位置
    this.scrollTop = document.documentElement.scrollTop;
    next();
  },
  activated() {
    //刷新列表
    if (this.routeName === 'details') {
      //调用刷新列表的接口
    } else {
      //无需刷新缓存
      document.documentElement.scrollTop = this.scrollTop;
    }
  },
}
相关推荐
浮游本尊3 分钟前
Nginx配置:如何在一个域名下运行两个网站
前端·javascript
m0_748239833 分钟前
前端bug调试
前端·bug
m0_748232926 分钟前
[项目][boost搜索引擎#4] cpp-httplib使用 log.hpp 前端 测试及总结
前端·搜索引擎
新中地GIS开发老师11 分钟前
《Vue进阶教程》(12)ref的实现详细教程
前端·javascript·vue.js·arcgis·前端框架·地理信息科学·地信
m0_7482495413 分钟前
前端:base64的作用
前端
html组态19 分钟前
web组态可视化编辑器
前端·物联网·编辑器·web组态·组态·组态软件
~央千澈~26 分钟前
如果你的网站是h5网站,如何将h5网站变成小程序-除开完整重做方法如何快速h5转小程序-h5网站转小程序的办法-优雅草央千澈
前端·apache
qq_3720068628 分钟前
浏览器http缓存问题
网络协议·http·缓存
计算机毕设定制辅导-无忧学长31 分钟前
Redis 初相识:开启缓存世界大门
数据库·redis·缓存
m0_7482398339 分钟前
基于web的音乐网站(Java+SpringBoot+Mysql)
java·前端·spring boot