zoukankan      html  css  js  c++  java
  • vue keep-alive 实现详情返回列表保留页面数据

    实现功能

    1. 详情页返回列表页,列表页保留上次浏览位置
    2. 其它页面进入到列表表,列表页刷新
    3. 当详情页有数据改变时,列表页也要更新该条数据

    实现思路

    1. 用keep-alive保留列表页面数据
    2. activated钩子函数来更新数据
    3. 利用路由守卫判断是否从详情页返回来决定是否更新数据
    4. 当详情数据改变时,返回列表后利用vm.$set(vm.list,index,newValue)vm.list.splice(i,1)进行更新

    具体实现

    1. 设置keepalive

    App.vue
    <keep-alive>
      <router-view v-if="$route.meta.keepAlive">
      </router-view>
    </keep-alive>
    <router-view v-if="!$route.meta.keepAlive" />
    
    router/index.js
    {
      path: ...,
      name: ...,
      meta: {
        title: '列表',
        keepAlive: true,
        canKeep:false
      },
      component: ...
    },

    2. 在列表页路由守卫判断是否保留数据,只在详情返回做保留

    beforeRouteEnter(to, from, next) {
    if (from.name == "detail") {
      to.meta.canKeep = true;
    } else {
      to.meta.canKeep = false;
    }
    next();
    },

    3. 在activated中更新数据

    activated() {
        if (!this.$route.meta.canKeep) {
        // 在这里发送请求,刷新数据
        }
    },

    4. 列表更新单条数据

      activated() {
        // 刷新数据
        if (!this.$route.meta.canKeep) {
        ...
          window.scrollTo(0, 1);
        } else {
          // 不刷新数据 但详情页数据有更改时
            this.showPackageList.forEach((item,idx) => {
            if(..){
               item.looked = true;
              // 更新某一条数据
              this.$set(this.showPackageList, idx, item);           
            }
          })
        }
        this.rollingLoad();
      },

    遇到问题

    从详情1返回列表时正常,进入其它页面,返回,列表数据更新,进入详情2,返回列表,此时列表会自动定位到从列表进入详情1时的位置,而不是进入详情2前的位置。

    原因

    列表只做了数据刷新,位置信息依旧保留,当列表刷新后,如果页面触发过滚动,位置信息得到更新,再次返回则正常,无触发滚动则再次返回会回到第一次定位的位置

    解决方法

    在列表数据更新后,手动触发滚动


    activated() {
        if (!this.$route.meta.canKeep) {
        // 刷新数据
        // 重置页面位置
          window.scrollTo(0,1)
        }
    },
    以上就是 keep-alive 实现详情返回列表保留页面数据。。。。
  • 相关阅读:
    .a包生成64位
    iOS教程
    iOS 难题解决日志------2层控制器 上面的控制器显示透明
    企业级的App发布流程
    如何从oc中去获取一个私有的变量.....
    iOS app的破解原理,就是去除已付费的账户信息的原理是什么?
    Could not launch "app_name"
    GCD时间轴
    Win8自动更新怎么关闭 取消Win8自动更新
    python3 elf文件解析
  • 原文地址:https://www.cnblogs.com/gavinjay/p/10644379.html
Copyright © 2011-2022 走看看