zoukankan      html  css  js  c++  java
  • vue(25)路由结合keep-alive使用缓存路由

    当我们从一个路由组件跳转到另一个路由组件的时候,默认是会先销毁前一个路由组件在新建后一个路由组件,每次都会触发组件的销毁和创建周期函数。

    每次创建和销毁组件比较消耗资源,我们可以结合keep-alive来让路由组件进行缓存,这样切换的时候路由组件不会被销毁,只会触发组件的deactivated(隐藏)和 activated(激活)两个生命周期函数。

    使用的方式是在App.vue文件中,将router-view写成keep-alive的方式:

      <router-view v-slot="{Component}">
        <transition>
          <keep-alive>
            <component :is="Component"/>
          </keep-alive>
        </transition>
      </router-view>
    上面的写法是对所有的路由组件都生效,即都使用缓存的方式。
    如果我们希望只对部分组件生效,可以为keep-alive标签附上exclude="排除组件的名称1,排除组件的名称2"属性或者include="使用缓存的组件名称1,...":
      <router-view v-slot="{Component}">
        <transition>
          <keep-alive exclude="About">
            <component :is="Component"/>
          </keep-alive>
        </transition>
      </router-view>
     
    结合keep-alive的路由组件我们还可以实现如下功能:
    比如我们有Home组件路由有About组件路由,About组件路由下有两个Article子组件路由(传入参数不同,显示各自的文章内容)。
    现在我们首先点击About路由,然后点击进入id为2的Article子路由,现在页面显示的是Article为2的文章内容。
    然后我们点击回到Home路由,然后再点击进入About路由,这时候我们希望页面还是显示的之前离开时的Article为2的文章内容,即Article为2的子路由。
    实现上述功能的思路是,首先使用keep-alive对路由进行缓存,再组件About的data中定义一个path变量再路由离开时(使用beforeRouterLeave路由钩子函数在路由离开时触发)保存当前的路由,由于使用了keep-alive所以这个变量在About组件再次被激活时不会被初始化,也就是能拿到上次离开这个路由时的path。然后在activated生命周期函数中使用this.$router.push(path);在组件激活时就自动跳到上次离开时的路由即可。
     
  • 相关阅读:
    T-Sql语法:行转列(pivot)和列转行(unpivot)
    T-Sql语法:GROUP BY子句GROUPING SETS、CUBE、ROLLUP
    Asp.net使用Plupload上传组件详解
    form标签属性enctype之multipart/form-data请求详解
    基于Owin Oauth2构建授权服务器
    AutoFac使用~IOC容器(DIP,IOC,DI)
    第二节:模型(Models)和管理后台(Admin site)
    第三节:视图(Views)和模板(Templates)
    THINKPHP 3.2 PHP SFTP上传下载 代码实现方法
    Linux 上导出导入sql文件到服务器命令
  • 原文地址:https://www.cnblogs.com/maycpou/p/14787336.html
Copyright © 2011-2022 走看看