iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Vue页面保活方法是什么
  • 432
分享到

Vue页面保活方法是什么

2023-07-06 00:07:11 432人浏览 泡泡鱼
摘要

本篇内容主要讲解“Vue页面保活方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Vue页面保活方法是什么”吧!为了让页面保活更加稳定,你们是怎么做的?我用一行配置实现了Vue页面保活是指

本篇内容主要讲解“Vue页面保活方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Vue页面保活方法是什么”吧!

为了让页面保活更加稳定,你们是怎么做的?

我用一行配置实现了

Vue页面保活方法是什么

Vue页面保活是指在用户离开当前页面后,可以在返回时恢复上一次浏览页面的状态。这种技术可以让用户享受更加流畅自然的浏览体验,而不会被繁琐的操作打扰。

为什么需要页面保活?

页面保活可以提高用户的体验感。例如,当用户从一个带有分页的表格页面(【页面A】)跳转到数据详情页面(【页面B】),并查看了数据之后,当用户从【页面B】返回【页面A】时,如果没有页面保活,【页面A】会重新加载并跳转到第一页,这会让用户感到非常烦恼,因为他们需要重新选择页面和数据。因此,使用页面保活技术,当用户返回【页面A】时,可以恢复之前选择的页码和数据,让用户的体验更加流畅。

如何实现页面保活?

状态存储

这个方案最为直观,原理就是在离开【页面A】之前手动将需要保活的状态存储起来。可以将状态存储到LocalStoreSessionStoreIndexedDB。在【页面A】组件的onMounted钩子中,检测是否存在此前的状态,如果存在从外部存储中将状态恢复回来。

有什么问题?
  • 浪费心智(麻烦/操心)。这个方案存在的问题就是,需要在编写组件的时候就明确的知道跳转到某些页面时进行状态存储。

  • 无法解决子组件状态。在页面组件中还可以做到保存页面组件的状态,但是如何保存子组件呢。不可能所有的子组件状态都在页面组件中维护,因为这样的结构并不是合理。

组件缓存

利用Vue的内置组件<KeepAlive/>缓存包裹在其中的动态切换组件(也就是<Component/>组件)。<KeepAlive/>包裹动态组件时,会缓存不活跃的组件,而不是销毁它们。当一个组件在<KeepAlive/>中被切换时,activateddeactivated生命周期钩子会替换mountedunmounted钩子。最关键的是,<KeepAlive/>不仅适用于被包裹组件的根节点,也适用于其子孙节点。

<KeepAlive/>搭配vue-router即可实现页面的保活,实现代码如下:

<template>  <RouterView v-slot="{ Component }">    <KeepAlive>      <component :is="Component"/>    </KeepAlive>  </RouterView></template>
有什么问题?
  • 页面保活不准确。上面的方式虽然实现了页面保活,但是并不能满足生产要求,例如:【页面A】是应用首页,【页面B】是数据列表页,【页面C】是数据详情页。用户查看数据详情的动线是:【页面A】->【页面B】->【页面C】,在这条动线中【页面B】->【页面C】的时候需要缓存【页面B】,当从【页面C】->【页面B】的时候需要从换从中恢复【页面B】。但是【页面B】->【页面A】的时候又不需要缓存【页面B】,上面的这个方法并不能做到这样的配置。

最佳实践

最理想的保活方式是,不入侵组件代码的情况下,通过简单的配置实现按需的页面保活。

【不入侵组件代码】这条即可排除第一种方式的实现,第二种【组件缓存】的方式只是败在了【按需的页面保活】。那么改造第二种方式,通过在router的路由配置上进行按需保活的配置,再提供一种读取配置结合<KeepAlive/>include属性即可。

路由配置

src/router/index.ts

import useRoutersStore from '@/store/routers';const routes: RouteRecordRaw[] = [  {    path: '/',    name: 'index',    component: () => import('@/layout/index.vue'),    children: [      {        path: '/app',        name: 'App',        component: () => import('@/views/app/index.vue'),      },      {        path: '/data-list',        name: 'DataList',        component: () => import('@/views/data-list/index.vue'),        meta: {          // 离开【/data-list】前往【/data-detail】时缓存【/data-list】          leaveCaches: ['/data-detail'],        }      },      {        path: '/data-detail',        name: 'DataDetail',        component: () => import('@/views/data-detail/index.vue'),      }    ]  }];router.beforeEach((to: RouteLocationNORMalized, from: RouteLocationNormalized, next: NavigationGuardNext) => {  const { cacheRouter } = useRoutersStore();  cacheRouter(from, to);  next();});
保活组件存储

src/stroe/router.ts

import { RouteLocationNormalized } from 'vue-router';const useRouterStore = defineStore('router', {  state: () => ({    cacheComps: new Set<string>(),  }),  actions: {    cacheRouter(from: RouteLocationNormalized, to: RouteLocationNormalized) {      if(        Array.isArray(from.meta.leaveCaches) &&         from.meta.leaveCaches.inclued(to.path) &&         typeof from.name === 'string'      ) {        this.cacheComps.add(form.name);      }      if(        Array.isArray(to.meta.leaveCaches) &&         !to.meta.leaveCaches.inclued(from.path) &&         typeof to.name === 'string'      ) {        this.cacheComps.delete(to.name);      }    },  },  getters: {    keepAliveComps(state: State) {      return [...state.cacheComps];    },  },});
页面缓存

src/layout/index.vue

<template>  <RouterView v-slot="{ Component }">    <KeepAlive :include="keepAliveComps">      <component :is="Component"/>    </KeepAlive>  </RouterView></template><script setup>import { storeToRefs } from 'pinia';import useRouterStore from '@/store/router';const { keepAliveComps } = storeToRefs(useRouterStore());</script>
typescript提升配置体验
import 'vue-router';export type LeaveCaches = string[];declare module 'vue-router' {  interface RouteMeta {    leaveCaches?: LeaveCaches;  }}

该方案的问题

  • 缺少通配符处理index

  • 无法缓存/preview/:address这样的动态路由。

  • 组件名和路由名称必须保持一致。

到此,相信大家对“Vue页面保活方法是什么”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: Vue页面保活方法是什么

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

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

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

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

下载Word文档
猜你喜欢
  • Vue页面保活方法是什么
    本篇内容主要讲解“Vue页面保活方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Vue页面保活方法是什么”吧!为了让页面保活更加稳定,你们是怎么做的?我用一行配置实现了Vue页面保活是指...
    99+
    2023-07-06
  • 分享一个极致舒适的Vue页面保活方案
    为什么需要页面保活?页面保活可以提高用户的体验感。例如,当用户从一个带有分页的表格页面(【页面A】)跳转到数据详情页面(【页面B】),并查看了数据之后,当用户从【页面B】返回【页面A】时,如果没有页面保活,【页面A】会重新加载并跳转到第一页...
    99+
    2023-05-14
    Vue.js vue-router
  • vue跳转页面常用的方法是什么
    本文小编为大家详细介绍“vue跳转页面常用的方法是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“vue跳转页面常用的方法是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1:router-link跳转1....
    99+
    2023-07-05
  • VUE单页面应用SEO的方法是什么
    这篇文章主要介绍了VUE单页面应用SEO的方法是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇VUE单页面应用SEO的方法是什么文章都会有所收获,下面我们一起来看看吧。vue-meta-info ...
    99+
    2023-06-27
  • 什么是vue单页面和多页面
    本教程操作环境:windows7系统、vue3版,DELL G3电脑。vue中什么是单页面和多页面单页:全称SPA单页面应用(SinglePage Web Application)。单页应用将所有内容放在一个页面中,从而使整个页面更加流畅。...
    99+
    2023-05-14
    Vue vue.js
  • vue单页面和多页面是什么
    本文小编为大家详细介绍“vue单页面和多页面是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“vue单页面和多页面是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。在vue中,单页面全称“SPA单页面应用”...
    99+
    2023-07-04
  • DIV页面布局的方法是什么
    本篇内容介绍了“DIV页面布局的方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!DIV页面布局与规...
    99+
    2024-04-02
  • thinkphp页面修改的方法是什么
    本篇内容主要讲解“thinkphp页面修改的方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“thinkphp页面修改的方法是什么”吧!页面渲染在thinkphp框架下,页面的渲染是通过控...
    99+
    2023-07-06
  • vue中实现全页面或局部刷新的方法是什么
    今天就跟大家聊聊有关vue中实现全页面或局部刷新的方法是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。vue中怎么实现页面刷新一.全页面刷新修改 App.vue,代码如下:<...
    99+
    2023-06-22
  • session跨页面传值的方法是什么
    有多种方法可以实现session跨页面传值,以下是几种常用的方法:1. 使用服务器端的session对象:将要传递的值存储在服务器端...
    99+
    2023-08-15
    session
  • jquery mobile初始页面的方法是什么
    在jQuery Mobile中,初始页面的方法是使用`$(document).on("pagecreate", function()...
    99+
    2023-09-05
    jquery
  • android初始化页面的方法是什么
    在Android中,可以通过以下几种方法来初始化页面:1. 在Activity的onCreate()方法中进行初始化操作。onCre...
    99+
    2023-08-09
    android
  • ASP.NET页面的aspx扩展方法是什么
    这篇文章主要讲解了“ASP.NET页面的aspx扩展方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“ASP.NET页面的aspx扩展方法是什么”吧!需求:某网站因业务扩展,需拆分出另...
    99+
    2023-06-17
  • 激活pycharm的方法是什么
    激活pycharm的方法:1、下载并安装PyCharm:需从官网下载,选择适合的操作系统的版本;2、启动PyCharm;3、选择激活方式:在“激活”选项下,选择不同的激活方式;4、一旦选择了激活方式并成功输入了激活码或许可证文件,PyCha...
    99+
    2023-12-13
    pycharm
  • iframe跨域加载页面的方法是什么
    要在一个iframe中加载一个跨域的页面,可以使用以下方法:1. 使用postMessage方法:在父页面中,添加一个message...
    99+
    2023-08-08
    iframe
  • eclipse实现页面切换的方法是什么
    在Eclipse中,实现页面切换的方法主要有以下几种:1. 使用多个视图:在Eclipse中,可以使用多个视图来实现页面切换。可以通...
    99+
    2023-09-25
    eclipse
  • App保活实现原理是什么
    小编给大家分享一下App保活实现原理是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!概述早期的 Android 系统不完善,导致 App 侧有很多空子可以钻,...
    99+
    2023-06-15
  • 用vue写的页面后缀名是什么
    本教程操作环境:windows7系统、vue3版,DELL G3电脑。用vue写的页面后缀名是“.vue”。.vue 文件是一个自定义的文件类型,用类 HTML 语法描述一个 Vue 组件。每个 .vue 文件包含三种类型的顶级语言块 &l...
    99+
    2023-05-14
    vue3 Vue
  • python抓取网页内容并保存的方法是什么
    在Python中,可以使用requests库来抓取网页内容,并使用文件操作来保存抓取到的内容。下面是一个示例代码: import r...
    99+
    2024-03-04
    python
  • ASP.NET页面间数据传递的方法是什么
    这篇文章主要讲解了“ASP.NET页面间数据传递的方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“ASP.NET页面间数据传递的方法是什么”吧!Web页面是无状态的,服务器对每一次请...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作