美文网首页vue实践
keep-alive 缓存的是动态组件

keep-alive 缓存的是动态组件

作者: 别过经年 | 来源:发表于2017-05-09 14:47 被阅读190次

一般大家在用keep-alive的时候可能是如下写法:

   <keep-alive>
      <router-view></router-view>
    </keep-alive>

这个是典型的用法,用于缓存路由组件,官方文档的解释是:

图片.png

对官方说法半信半疑,也不是很理解他里面的动态组件的说法,于是自己做了个demo:

在父组件中嵌套了:

   <keep-alive>
      <topic class="topic-root"></topic>
    </keep-alive>

Topic.vue

export default {
  name: "Topic",
  data() {
    return {
      initData: 9
    }
  },
  methods: {

  },
  beforeMount() {//每次进入都会执行
    console.info("topic:beforeMount");
  },
  activated() {//每次进入都会执行
    console.info(this);
  }
}

子组件包裹了keep-alive后每次进入页面都会执行beforeMountactivated,证明静态组件是不能被缓存的,官网给出了那些情况会被缓存:

<!-- 基本 -->
<keep-alive>
  <component :is="view"></component>
</keep-alive>
<!-- 多个条件判断的子组件 -->
<keep-alive>
  <comp-a v-if="a > 1"></comp-a>
  <comp-b v-else></comp-b>
</keep-alive>
<!-- 和 <transition> 一起使用 -->
<transition>
  <keep-alive>
    <component :is="view"></component>
  </keep-alive>
</transition>

还有一种就是上面提到的会被缓存:

 <keep-alive>
     <router-view></router-view>
 </keep-alive>

安卓手机是有回退键的,那么点击回退键keep-alive还能缓存组件吗,带着疑问进行了pc浏览器和移动浏览器的测试

经过测试发现无论pc浏览器的前进后退键还是安卓手机的后退键keep-alive都是可以缓存组件的,只有刷新页面才会重新mount组件。

PaperInfo组件是keep-alive的router-view渲染出来的,所以每次PaperInfo都会走activted钩子函数,而PaperInfo里面又有router-view这时候如果不被keep-alive包裹的话,其渲染出来的子组件是不会被缓存的,在添加keep-alive后子组件Report被缓存了,Report的字组件Topic这时候也是会被缓存的,每次都会走actived钩子函数。

小结:如果当前组件的是被缓存的,其子组件是通过router-view渲染的话,必须加上keep-alive才能被缓存,如果就是普通的子组件,它也会被缓存,以此类推该子组件的子组件也会被缓存。

相关文章

  • 随笔

    缓存 : 包裹动态组件时,会缓存不活动的组件实例,而不是销...

  • vue-api-内置组件

    component 动态组件 keep-alive 缓存组件 slot 插槽

  • VUE 动态组件&异步组件

    在动态组件中使用 keep-alive 在动态组件中使用keep-alive可一缓存组件 在组件切换的时候不会重新...

  • 重学Vue--keep-alive的使用

    keep-alive是什么? keep-alive 是 Vue 的内置组件,当它包裹动态组件时,会缓存不活动的组件...

  • vue 2.0中keep-alive 组件缓存

    keep-alive用法 包裹动态组件时,会缓存不活动的组件实例,而不是销毁它们。和 ...

  • vue缓存机制之动态keep-alive

    使用keep-alive包裹动态组件时,会缓存不活动的组件。但是有些情况下希望使用keep-alive包裹的动态组...

  • keep-alive的使用过程以及修改bug遇到的那些坑

    keep-alive的使用介绍 包裹动态组件时,会缓存不活动的组件实例,而不是销毁它们。...

  • vue踩坑日记

    keep-alive缓存的组件调用this.$destory()后,无法再次缓存! 解决办法: 动态修改keep-...

  • Vue中keep-alive的使用

    概念    keep-alive 是 Vue 的内置组件,当它包裹动态组件时,会缓存不活动的组件实例,而不是销毁它...

  • vue keep-alive

    包裹动态组件时,会缓存不活动的组件实例,而不是销毁它们。和 相...

网友评论

    本文标题:keep-alive 缓存的是动态组件

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