zoukankan      html  css  js  c++  java
  • keep-alive

    keep-alive的应用场景
    keep-alive是 Vue 内置的一个组件,可以使被包含的组件保留状态,或避免重新渲染。
    在vue 2.1.0 版本之后,keep-alive新加入了两个属性: include(包含的组件缓存) 与 exclude(排除的组件不缓存,优先级大于include) 。
     
    如果未使用keep-alive组件,则在页面回退时仍然会重新渲染页面,触发created钩子,使用体验不好。 在以下场景中使用keep-alive组件会显著提高用户体验,菜单存在多级关系,多见于列表页+详情页的场景如
    • 商品列表页点击商品跳转到商品详情,返回后仍显示原有信息
    • 订单列表跳转到订单详情,返回,等等场景。
    <keep-alive include='include_components' exclude='exclude_components'>
        <component>
            <!-- 该组件是否缓存取决于include和exclude属性 --> 
        </component>
    </keep-alive>

     参数解释
      include - 字符串或正则表达式,只有名称匹配的组件会被缓存
      exclude - 字符串或正则表达式,任何名称匹配的组件都不会被缓存
      include 和 exclude 的属性允许组件有条件地缓存。二者都可以用“,”分隔字符串、正则表达式、数组。当使用正则或者是数组时,要记得使用v-bind 。 

     使用示例:
    <!-- 逗号分隔字符串,只有组件a与b被缓存。 -->
        <keep-alive include="a,b">
          <component></component>
        </keep-alive>
        
        <!-- 正则表达式 (需要使用 v-bind,符合匹配规则的都会被缓存) -->
        <keep-alive :include="/a|b/">
          <component></component>
        </keep-alive>
        
        <!-- Array (需要使用 v-bind,被包含的都会被缓存) -->
        <keep-alive :include="['a', 'b']">
          <component></component>
        </keep-alive>
     
    keep-alive的生命周期
    • 初次进入时:created > mounted > activated;退出后触发 deactivated
    • 再次进入:会触发 activated;事件挂载的方法等,只执行一次的放在 mounted 中;组件每次进去执行的方法放在 activated 中
     
    页面只刷新一次,任何页面跳转到这个页面都不刷新
    方法一: 直接在你的router-view 标签外面 包裹一个 keep-alive标签, 加 include="组件名称"
    <keep-alive  include="FileList">
         <router-view></router-view>
    </keep-alive>
    这时候匹配到的组件就会值加在一次。这个就比较简单,但能使用性不广。 
     方法二: (keep-alive与vue-router配合使用)
    配置路由器的时候 需要加 keepAlive: true 参数
        {
           path: 'Loading',//等待页面
           component: Loading,
           meta: {
             requireAuth: true, // requireAuth属性作用是表明该路由是否需要登录验证,在进行全局拦截时,我们将通过该属性判断路由的跳转,该属性包含在meta属性中:
             keepAlive: false, //此组件不需要被缓存false 需要缓存为true
       }
     
    配置入口文件
    <keep-alive>
         <router-view v-if="$route.meta.keepAlive">
         <!-- 这里是会被缓存的视图组件,比如 Home! -->
        </router-view>
    </keep-alive>
    <router-view v-if="!$route.meta.keepAlive"></router-view>
           <!-- 这里是不被缓存的视图组件,比如 Edit! -->
    之后在 router.beforeEach  方法里面来动态修改 keepAlive  的值 
     
    router.beforeEach((to, from, next) => {
      iView.LoadingBar.start();//loadong 效果
     
      //进入登录页面的时候清除 token
      if(to.path === '/login' ){
        sessionStorage.removeItem("token", '');
        sessionStorage.removeItem("user_Data", '');
      }
      store.state.token = sessionStorage.getItem('token');//获取本地存储的token
      if (to.meta.requireAuth) {  // 判断该路由是否需要登录权限
        if (store.state.token !== "" && store.state.token !== null) {  // 通过vuex state获取当前的token是否存在
          //判断是否需要缓存
          if(to.path === '/filelist' && from.path === '/fileview'){
            to.meta.keepAlive = true;  // 让 列表页 缓存,即不刷新
            next();
          }else {
            to.meta.keepAlive = false;  // 让 列表页 即不缓存,刷新
            next();
          }
        }else {
          next({
            path: '/login',
            query: {redirect: from.fullPath}  // 将跳转的路由path作为参数,登录成功后跳转到该路由
          })
        }
     
      }else {
        next();
      }
    })

    我这里只判断  to.path === '/filelist' && from.path === '/fileview' (翻译从文一下这个代码,本路径是fileview,要跳转的路径是filelist,也就是从fileviewlu路径跳转到filelist,不刷新filelist页面)表页的时候缓存。

    这里我们就可以愉快的使用之前缓存是数据了。

     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
    a
  • 相关阅读:
    Excel函数和公式——Excel基础(8)
    Excel函数和公式——Excel基础(7)
    条件格式与公式——Excel基础(6)
    日期函数——Excel基础(5)
    Excel导入邮件合并——Excel基础(4)
    VScode与ssh
    python绘图相关知识点
    Python加密成.so或dll
    Pytorch从本地获取数据集
    Pytorch_3.3_ 线性回归的简洁实现
  • 原文地址:https://www.cnblogs.com/maxiag/p/13390672.html
Copyright © 2011-2022 走看看