iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > html >vue的keep-alive怎么正确使用
  • 879
分享到

vue的keep-alive怎么正确使用

2024-04-02 19:04:59 879人浏览 薄情痞子
摘要

这篇文章主要讲解了“Vue的keep-alive怎么正确使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue的keep-alive怎么正确使用”吧!

这篇文章主要讲解了“Vue的keep-alive怎么正确使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue的keep-alive怎么正确使用”吧!

  先来看一个项目中的需求

  作为苦逼的前端开发者,我们无时无刻都要面对产品经理提的各种需求, 比如这个场景

  场景:

  从首页的点击导航进入列表页,

  列表页点击列表进入 该 数据详情页

  从详情页返回,希望列表页缓存,不重新渲染数据,这样会提高用户体验。

  分析一下

  这样需求,如果是小程序的话,默认列表页就会缓存,因为小程序的运行环境是微信客户端,当我们打开一个页面会新建一个WEBview,

  所有列表页和详情页是两个webview,当我们进入详情页,列表页webview,只是会在详情页webview下面,不会销毁。

  以下是小程序运行环境:我们可以看到每个页面都有一个webview

  但是但是,我们的项目是用vue开发的webapp,多个组件共用一个窗口,当我们切换路由时,切出路由组件会销毁,所有列表页进入详情页列表页会销毁,重新回到列表页,列表页组件会重新加载。

  解决方案

  睡服提需求的人,改个简单的需求

  emm... ,看了看镜子中的自己,估计这辈子没办法从脸上得到任何的便利了,老老实实换个方案吧。

  keep-alive

  keep-alive是Vue提供的一个抽象组件,主要用于保留组件状态或避免重新渲染。

  <keep-alive> 包裹动态组件时,会缓存不活动的组件实例,而不是销毁他们。

  和<transition> 相似, <keep-alive> 是一个抽象组件,它自身不会渲染一个DOM元素,也不会出现在父组件链中。

  但是 keep-alive 会把其包裹的所有组件都缓存起来。

  em...怎么办呢,我们只是需要让列表页缓存啊.

  分析一下

  我们可以把需求拆分为2步

  (1) 把需要缓存和不需要缓存的组件区分开,在组件的路由配置的元信息,meta中定义哪些需要缓存哪些不需要缓存

  具体代码如下

  1,定义两个出口 router-view

  <keep-alive>

  <!-- 需要缓存的视图组件 -->

  <router-view v-if="$route.meta.keepAlive">

  </router-view>

  </keep-alive>

  <!-- 不需要缓存的视图组件 -->

  <router-view v-if="!$route.meta.keepAlive">

  </router-view>

  2,在router配置中定义哪些需要缓存哪些不需要缓存

  new Router({

  routes: [

  {

  path: '/',

  name: 'index',

  component: () => import('./views/keep-alive/index.vue')

  },

  {

  path: '/list',

  name: 'list',

  component: () => import('./views/keep-alive/list.vue'),

  meta: {

  keepAlive: true //需要被缓存

  }

  },

  {

  path: '/detail',

  name: 'detail',

  component: () => import('./views/keep-alive/detail.vue')

  }

  ]

  })

  (2),开始按需缓存组件

  我们从官方文档提供的 api 入手,

  keep-alive组件如果设置了 include ,就只有和 include 匹配的组件会被缓存,

  所以思路就是,动态修改 include 数组来实现按需缓存。

  <template>

  <keep-alive :include="include">

  <!-- 需要缓存的视图组件 -->

  <router-view v-if="$route.meta.keepAlive">

  </router-view>

  </keep-alive>

  <!-- 不需要缓存的视图组件 -->

  <router-view v-if="!$route.meta.keepAlive">

  </router-view>

  </template>

  <script>

  export default {

  name: "app",

  data: () => ({

  include: []

  }),

  watch: {

  $route(to, from) {

  //如果 要 to(进入) 的页面是需要 keepAlive 缓存的,把 name push 进 include数组

  if (to.meta.keepAlive) {

  !this.include.includes(to.name) && this.include.push(to.name);

  }

  }

  }

  };

  </script>

  此时我们发现,从详情页返回列表页,列表页真的不再刷新了

  em...新的问题又出现了,由于 列表页被缓存了,这个时候我从首页,再点击进入某个列表,也不刷新了,完了,点击首页导航应该进入不同的列表页的. 也就是说,从首页进入列表组件不应该被缓存的。

  解决一下,我们在定义路由是,在元信息中再加一个字段,这里是deepth字段,代表进入路由的层级,比如首页路由deepth是0.5,列表页是1,详情页是2

  new Router({

  routes: [

  {

  path: '/',

  name: 'index',

  component: () => import('./views/keep-alive/index.vue'),

  meta: {

  deepth: 0.5 // 定义路由的层级

  }

  },

  {

  path: '/list',

  name: 'list',

  component: () => import('./views/keep-alive/list.vue'),

  meta: {

  deepth: 1

  keepAlive: true //需要被缓存

  }

  },

  {

  path: '/detail',

  name: 'detail',

  component: () => import('./views/keep-alive/detail.vue'),

  meta: {

  deepth: 2

  }

  }

  ]

  })

  然后在 app.vue中增加监听器,监听 我们进入路由的 方向

  具体代码如下

  <template>

  <keep-alive :include="include">

  <!-- 需要缓存的视图组件 -->

  <router-view v-if="$route.meta.keepAlive">

  </router-view>

  </keep-alive>

  <!-- 不需要缓存的视图组件 -->

  <router-view v-if="!$route.meta.keepAlive">

  </router-view>

  </template>

  <script>

  export default {

  name: "app",

  data: () => ({

  include: []

  }),

  watch: {

  $route(to, from) {

  //如果 要 to(进入) 的页面是需要 keepAlive 缓存的,把 name push 进 include数组

  if (to.meta.keepAlive) {

  !this.include.includes(to.name) && this.include.push(to.name);

  }

  //如果 要 fORM(离开) 的页面是 keepAlive缓存的,

  //再根据 deepth 来判断是前进还是后退

  //如果是后退

  if (from.meta.keepAlive && to.meta.deepth < from.meta.deepth) {

  var index = this.include.indexOf(from.name);

  index !== -1 && this.include.splice(index, 1);

  }

  }

  }

  };

  </script>

感谢各位的阅读,以上就是“vue的keep-alive怎么正确使用”的内容了,经过本文的学习后,相信大家对vue的keep-alive怎么正确使用这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: vue的keep-alive怎么正确使用

本文链接: https://www.lsjlt.com/news/88792.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • vue的keep-alive怎么正确使用
    这篇文章主要讲解了“vue的keep-alive怎么正确使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue的keep-alive怎么正确使用”吧! ...
    99+
    2024-04-02
  • Vue的keep-alive怎么使用
    这篇文章主要讲解了“Vue的keep-alive怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Vue的keep-alive怎么使用”吧! 用法 ...
    99+
    2024-04-02
  • Vue中的keep-alive如何使用
    本篇内容介绍了“Vue中的keep-alive如何使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!keep-alive 是 Vue 的内置...
    99+
    2023-07-05
  • 详解Vue中keep-alive的使用
    目录前言1、概念:2、作用:3、使用方式:前言 keep-alive 是 Vue 的内置组件,当它包裹动态组件时,会缓存不活动的组件实例,而不是销毁它们。例如:在开发中经常有从列表跳...
    99+
    2023-03-03
    Vue keep-alive使用 Vue keep-alive
  • vue内置组件keep-alive怎么使用
    这篇文章主要讲解了“vue内置组件keep-alive怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue内置组件keep-alive怎么使用”吧!一、Keep-alive 是什么k...
    99+
    2023-07-04
  • keep-alive组件怎么在Vue中使用
    这篇文章将为大家详细讲解有关keep-alive组件怎么在Vue中使用,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。 一、keep-alive 用法< keep-alive> 包...
    99+
    2023-06-14
  • vue中keep-alive的作用
    vue中keep-alive的作用:keep-alive属于vue的一个内置组件,它能够使被包含的组件保留状态或避免重新渲染,因此可以用来缓存组件,防止二次渲染,它的用法格式如下:...
    99+
    2024-04-02
  • vue中keep-alive组件怎么用
    这篇文章将为大家详细讲解有关vue中keep-alive组件怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。问题描述(什么是keep-alive)keep-alive顾名思义,保持活跃。保持谁活跃呢?...
    99+
    2023-06-15
  • Vue中keep-alive有什么用
    小编给大家分享一下Vue中keep-alive有什么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!什么是 keep-alive...
    99+
    2024-04-02
  • vue的keep-alive中如何使用EventBus
    这篇文章主要介绍了vue的keep-alive中如何使用EventBus,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1.keep-aliv...
    99+
    2024-04-02
  • Vue--keep-alive使用实例详解
    目录简介公共代码动态组件实例不加keep-alive加keep-aliverouter-view实例不加keep-alive加keep-alive(加到App.vue里)加keep-...
    99+
    2024-04-02
  • vue使用keep-alive后清除缓存的方法
    什么是keepalive? 在平常开发中,有部分组件没有必要多次初始化,这时,我们需要将组件进行持久化,使组件的状态维持不变,在下一次展示时,也不会进行重新初始化组件。 ...
    99+
    2024-04-02
  • Vue 内置组件keep-alive的使用示例
    目录一、keep-alive 用法使用示例: 1.缓存所有页面:2.根据条件缓存部分页面 3.结合vue-router,缓存部分页面二、keep-alive 生命周期 1. acti...
    99+
    2024-04-02
  • vue如何使用keep-alive缓存页面
    这篇文章主要介绍vue如何使用keep-alive缓存页面,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!keep-alive缓存页面比如在表单输入页面进入下一步后,再返回上一步到表单页时要保留表单输入的内容、比如在列...
    99+
    2023-06-26
  • vue2.0中keep-alive怎么用
    这篇文章主要介绍vue2.0中keep-alive怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1.基本用法vue2.0提供了一个keep-alive组件用来缓存组件,避免多次...
    99+
    2024-04-02
  • vue中keep-alive组件的用法示例
    问题描述(什么是keep-alive) keep-alive顾名思义,保持活跃。保持谁活跃呢? 首先我们知道,因为vue就是组件化编程,一个.vue文件就是一个组...
    99+
    2024-04-02
  • vue使用webpack打包后keep-alive不生效怎么办
    这篇文章将为大家详细讲解有关vue使用webpack打包后keep-alive不生效怎么办,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。问题是这样的,我使用webpack...
    99+
    2024-04-02
  • 关于Vue中keep-alive的作用及使用方法
    目录一、概念:二、作用:三、属性四、使用场景五、使用方式:一、概念: keep-alive是Vue的内置组件,当它包裹动态组件时,会缓存不活动的组件实例,该组件将不会销毁。 二、作用...
    99+
    2023-05-17
    Vue中keep-alive使用 Vue中keep-alive作用
  • 怎么在keep-alive中使用LRU算法
    怎么在keep-alive中使用LRU算法?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。vue的keep-alive内置组件的使用也是使用了改算法,源码如下:export&...
    99+
    2023-06-15
  • vue如何使用keep-alive后清除缓存
    小编给大家分享一下vue如何使用keep-alive后清除缓存,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!什么是keepalive在平常开发中,有部分组件没有必...
    99+
    2023-06-20
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作