keep-alive 是vue内置组件 缓存组件内部状态 避免重新渲染

<keep-alive > 是vue内置的一个组件,可用于缓存动态组件 ,使包裹的动态组件在切换时 保存状态,避免重新渲染

可以缓存组件,也可以缓存路由

    <template>
       <div>

        <button @click="switchPage">切换页面</button>

        <keep-alive >

          <component :is="curentComponent"></component>

        </keep-alive>

      </div>
    </template>

<script>

import ComponentA from '@/components/ComponentA.vue'

import ComponentB from '@/components/ComponentB.vue'

import ComponentC from '@/components/ComponentC.vue'

export default {

  components: {

    ComponentA,

    ComponentB,

    ComponentC

  },

  data () {

    return {

      user: {},

      curentComponent: 'ComponentA'

    }

  },

 methods: {

    switchPage () {

      this.curentComponent = this.curentComponent === 'ComponentA' ? 'ComponentB' : 'ComponentA'

    },

}

}

</script>

keep-alive 缓存的组件会有两个钩子函数:activated 和 deactivated

第一次进入被缓存的组件A 会触发beforeCreate ==>created ==>beforeMount ==>mounted ==>activated 

离开被缓存的A组件 进入被缓存的B组件,会触发A组件的 deactivated ,则第一次进入被缓存的B组件 会触发beforeCreate ==>created ==>beforeMount ==>A组件的deactivated ==>mounted ==>activated 

第二次再进这个被缓存的组件A 只触发activated ,不会再触发beforeCreate,  created , beforeMount,  mounted

keep-alive 可配置 include 属性,需要保证组件的名称(name)与 include 的值相同的才会被缓存

 <div>

        <button @click="switchPage">切换页面</button>

        <keep-alive include="ComponentBpage,ComponentCpage">

          <component :is="curentComponent"></component>

        </keep-alive>

      </div>

 

exclude  排除 指定哪些组件不被缓存,优先级大于 include,同include ,需要保证组件的名称(name)与 exclude  的值相同

 <div>

        <button @click="switchPage">切换页面</button>

        <!-- <keep-alive include="ComponentBpage,ComponentCpage"> -->

        <keep-alive exclude="ComponentBpage">

          <component :is="curentComponent"></component>

        </keep-alive>

      </div>

 被缓存后的组件 数据获取方式:

        在activated 中获取,因为进入缓存组件 不会触发 created 和 mounted钩子函数,会触发activated 钩子函数

       在 beforeRouteEnter 钩子函数中,在路由进入之前先获取数据。每次组件渲染或者每次进入路由的时候,都会执行 beforeRouteEnter

缓存路由:

include 也可以使用数组,使用 v-bind

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue2 中,你可以使用 `keep-alive` 组件缓存指定的路由组件。`keep-alive` 组件可以缓存被包裹的组件状态,以避免每次切换到该组件时都重新渲染。 要缓存指定的路由组件,你需要在路由配置中给该路由组件添加 `meta` 字段,然后在 `keep-alive` 组件中使用 `include` 或 `exclude` 属性来指定需要缓存的路由组件。具体实现步骤如下: 1. 在路由配置中给需要缓存的路由组件添加 `meta` 字段,例如: ```javascript const routes = [ { path: '/home', component: Home, meta: { keepAlive: true // 需要缓存组件 } }, { path: '/about', component: About } ] ``` 2. 在使用 `keep-alive` 组件的父组件中,使用 `include` 或 `exclude` 属性来指定需要缓存的路由组件,例如: ```html <template> <div> <router-view v-slot="{ Component }"> <keep-alive :include="cachedViews"> <component :is="Component" /> </keep-alive> </router-view> </div> </template> <script> export default { computed: { cachedViews() { // 获取需要缓存的路由组件 return this.$route.matched.filter(route => route.meta.keepAlive).map(route => route.component) } } } </script> ``` 在上面的例子中,`cachedViews` 计算属性返回了所有需要缓存的路由组件,然后在 `keep-alive` 组件中使用了 `include` 属性来指定需要缓存的路由组件。 如果你想排除某些路由组件,可以使用 `exclude` 属性来指定不需要缓存的路由组件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值