渲染列表 (七) -优化-缓存组件—返回网页原位置-keep-alive缓存组件-包裹动态组件-按需缓存单独配置-meta { keepAlive true } & activated 激活组件触发

优化-缓存组件—返回网页原位置-keep-alive 缓存组件-将其动态组件包裹起来-按需缓存,单独配置——meta: { keepAlive: true } & activated 激活组件触发

keep-alive 缓存组件:

https://cn.vuejs.org/v2/guide/components-dynamic-async.html#在动态组件上使用-keep-alive

重新创建动态组件的行为通常是非常有用的,我们更希望那些标签的组件实例能够被在它们第一次被创建的时候缓存下来。为了解决这个问题,我们可以用一个 <keep-alive> 元素将其动态组件包裹起来。

  • keep-alive 缓存组件
    • 我们可以用一个 <keep-alive> 元素将其动态组件包裹起来。
    • router-view 通过路由指定组件,动态的切换。
  • 并非所有组件要做缓存,所以按需缓存。
    • 缓存需要占用内存,容易造成内存溢出。
    • 思路:判断当前路由对应的组件是否需要缓存,如果需要使用 <keep-alive> 包裹。
  • 组件被缓存之后,再次激活的时候,created不会执行,activated 激活组件触发,deactivated 离开组件触发。

src/router.js

const router = new Router({
  routes: [
    { path: '/search', name: 'serach', component: Search },
    { path: '/search/result', name: 'serach-result', component: SearchResult },
    { path: '/user/profile', name: 'user-profile', component: UserProfile },
    { path: '/user/chat', name: 'user-chat', component: UserChat },
    { path: '/login', name: 'login', component: UserLogin },
-   { path: '/article/:id', name: 'article', component: Article}  
// meta 用来存储信息  按需缓存,单独配置——meta: { keepAlive: true } 
+   { path: '/article/:id', name: 'article', component: Article, meta: { keepAlive: true } },
    {
      path: '/',
      component: Layout,
      children: [
-        { path: '/', name: 'home', component: Home }
+        { path: '/', name: 'home', component: Home, meta: { keepAlive: true } },
        { path: '/question', name: 'question', component: Question },
        { path: '/media', name: 'media', component: Media },
        { path: '/user', name: 'user', component: User }
      ]
    }
  ]
})

src/App.vue

<div id="app">
  <keep-alive>
      //一级路由组件包裹
    <router-view v-if="$route.meta.keepAlive"></router-view>
  </keep-alive>
  <router-view v-if="!$route.meta.keepAlive"></router-view>
</div>

src/views/Layout.vue

<div id="app">
  <keep-alive>
      //二级路由组件包裹   $route:获取路由信息  判断是否有路由信息决定使用什么组件
    <router-view v-if="$route.meta.keepAlive"></router-view>
  </keep-alive>
  <router-view v-if="!$route.meta.keepAlive"></router-view>
</div>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值