美文网首页
vue keep-alive

vue keep-alive

作者: 撑船的摆渡人 | 来源:发表于2019-10-17 18:44 被阅读0次

    <keep-alive> 包裹动态组件时,会缓存不活动的组件实例,而不是销毁它们。和 <transition> 相似,<keep-alive>是一个抽象组件:它自身不会渲染一个 DOM 元素,也不会出现在父组件链中。 当组件在 <keep-alive> 内被切换,它的 activated 和 deactivated 这两个生命周期钩子函数将会被对应执行。

    项目中需要从列表页面进入详情页面返回时,保留在列表页面的操作,因为列表页面有多种搜索项和一些表格的操作,切换的时候,你有时会想保持这些组件的状态,以避免反复重渲染导致的性能问题。如果每次进到列表页面时重新进行操作,用户体验也非常不好

    对于需要缓存的页面,设置对应的name值

    export default {
      name: 'QueryList_keepAlive'
    }
    
    // include 和 exclude 属性允许组件有条件地缓存。二者都可以用逗号分隔字符串、正则表达式或一个数组来表示:
    <keep-alive include="QueryList_keepAlive">
        <router-view></router-view>
    </keep-alive>
    <keep-alive include="QueryList_keepAlive,QueryListDetails_keepAlive">
        <router-view></router-view>
    </keep-alive>
    <keep-alive :include="/^[\w\W]*_keepAlive/">
        <router-view></router-view>
    </keep-alive>
    <keep-alive :include="['QueryList_keepAlive', 'QueryListDetails_keepAlive']">
        <router-view></router-view>
    </keep-alive>
    

    匹配首先检查组件自身的 name 选项,如果 name 选项不可用,则匹配它的局部注册名称 (父组件 components 选项的键值)。匿名组件不能被匹配。

    有些情况下我们需要清空这个缓存,可以使用beforeRouterEnter,判断从哪个页面进来的,根据需要清空缓存的内容

    beforeRouterEnter(to,from,next){
      // 从详情页面进入时不需要做处理,其他页面需要重新获取数据
      if (from.path === '/details') {
        next()
      } else {
        next(vm => {
          vm.loading = false
          ...
          vm.crea
        })
      }
    }
    

    相关文章

      网友评论

          本文标题:vue keep-alive

          本文链接:https://www.haomeiwen.com/subject/bvuvmctx.html