zoukankan      html  css  js  c++  java
  • 路由的缓存

    在搭建 vue 项目时,有某些组件没必要多次渲染,所以需要将组件在内存中进行‘持久化’,此时 <keep-alive> 便可以派上用场了。 <keep-alive> 可以使被包含的组件状态维持不变,即便是组件切换了,其内的状态依旧维持在内存之中。在下一次显示时,也不会重现渲染。

    <router-link>和<router-view>和<keep-alive>

    主要 结合 Vue Router 配置 meta  true

    1.keep-alive

    <!-- template -->
    <keep-alive>
    <router-view v-if="$route.meta.keepAlive"></router-view>
    </keep-alive>
    <router-view v-if="!$route.meta.keepAlive"></router-view>
    //router配置
    new Router({
      routes: [
        {
        name: 'a',
        path: '/a',
        component: A,
        meta: {
          keepAlive: true
        }
      },
      {
       name: 'b',
         path: '/b',
         component: B
       }
      ]
    })
    

      

    <!-- 一个include解决了,不需要多写一个标签,也不需要在路由元中添加keepAlive了 -->
    <keep-alive include='a'>
    <router-view></router-view>
    </keeo-alive>
    

      

    <!-- 逗号分隔字符串,只有组件a与b被缓存。这样使用场景变得更有意义了 -->
    <keep-alive include="a,b">
    <component :is="view"></component>
    </keep-alive>
    <!-- 正则表达式 (需要使用 v-bind,符合匹配规则的都会被缓存) -->
    <keep-alive :include="/a|b/">
    <component :is="view"></component>
    </keep-alive>
    <!-- Array (需要使用 v-bind,被包含的都会被缓存) -->
    <keep-alive :include="['a', 'b']">
    <component :is="view"></component>
    

      

    <template>
      <div>
        <h1>欢迎页</h1>
        <input type="text" name="" value=""><br>
        <router-link to="/">回到首页</router-link>
      </div>
    </template>
     
    <script>
    export default {
      name: 'hello',
      //keep-alive钩子函数:组件被激活时调用
      activated() {
        console.log('欢迎页被激活');
      },
      //keep-alive钩子函数:组件消失,被缓存时调用
      deactivated() {
        console.log('欢迎页被缓存');
      }
    }
    </script>
    

      

      activated():页面组件被激活时调用。即组件第一次渲染时会被调用,之后每次 keep-alive 激活时也会被调用。通常我们可以在这个方法中实现:每次进入页面的时候获取最新的数据。

      只有组件被 keep-alive 包裹时,这两个函数才会被调用。如果作为正常组件使用,是不会被调用的。

    在关于页(about.vue)路由离开  这个钩子函数中设置首页不缓存:

    <template>
      <div>
        <h1>关于页</h1>
        <input type="text" name="" value=""><br>
        <router-link to="/">回到首页</router-link>
      </div>
    </template>
     
    <script>
    export default {
      name: 'hello',
      //keep-alive钩子函数:组件被激活时调用
      activated() {
        console.log('首页被激活');
      },
      //keep-alive钩子函数:组件消失,被缓存时调用
      deactivated() {
        console.log('首页被缓存');
      },
      beforeRouteLeave(to, from, next) {
        //设置下一个路由的meta(即首页)
        to.meta.keepAlive = false;  //让首页不缓存,即刷新
        //to.meta.keepAlive = true;  //让首页缓存,即不刷新
        next();
      }
    }
    </script>
    

      

      


    原文出自:www.hangge.com  转载请保留原文链接:https://www.hangge.com/blog/cache/detail_2132.html

    参考: https://blog.csdn.net/seanxwq/article/details/79164565

              https://www.hangge.com/blog/cache/detail_2132.html

  • 相关阅读:
    Script:Generate A DDL Script For A Table
    如何在windows vista/2008/7中 安装Oracle OMS 即Grid Control
    Sqlserver2005迁移至Oracle系列之五:角色、用户、及权限
    Mysql:命令选项、配置选项、(全局、会话)系统变量、状态变量:SQL模式
    Mysql:命令选项、配置选项、(全局、会话)系统变量、状态变量:如何使用系统变量?
    Mysql:临时表、表变量
    Sqlserver2005迁移至Oracle系列之四:在Oracle中创建位或运算函数bitor
    flex 图片旋转
    基于模板和XML在BS结构应用中生成word文件
    操作图片文件写入word
  • 原文地址:https://www.cnblogs.com/zhouhongdan/p/12613719.html
Copyright © 2011-2022 走看看