vue keep-alive保存路由状态1 (接下篇)

本文很长,但是很详细,请耐心看完就一目了然了有下篇

keep-alive 是 Vue 内置的一个组件,使被包含的组件保留状态,或避免重新渲染。

1. 基础用法,缓存所有路由:

<keep-alive>
  <router-view>
    <!-- 这里是会被缓存所有的视图组件 -->
  </router-view>
</keep-alive>

如果想要单一缓存一个怎么办呢?看下面

2. 初级用法,缓存指定路由:

    vue 2.1.0后提供了include/exclude两个属性: 下图为官方用法:

      include - 字符串或正则表达,只有匹配的组件会被缓存

      exclude - 字符串或正则表达式,任何匹配的组件都不会被缓存

     

// 组件 a
export default {
  name: ‘a‘,//先定义好组件名字 才能被缓存
  data () {
    return {}
  }
}
<keep-alive include="a,b">
  <router-view>
    <!-- name 为 a以及b 的组件将被缓存! -->
  </router-view>
</keep-alive>
<keep-alive exclude="a">
  <router-view>
    <!-- 除了 name 为 a 的组件都将被缓存! -->
  </router-view>
</keep-alive>

3. 进阶用法,结合vue-router 缓存指定路由:这里包含两个用法方式,也可以一块用,看个人习惯了,我偏向用 路由meta控制

方式1:路由表meta + 公共main组件判断

//修改1.在路由表js  增加 router.meta 属性
// routes 配置
export default [
  {
    path: ‘/home‘,
    name: ‘home‘,
    component: Home,
    meta: {
      keepAlive: true // 需要被缓存
    }
  }, {
    path: ‘/edit,
    name: ‘edit‘,
    component: Edit,
    meta: {
      keepAlive: false // 不需要被缓存
    }
  }
]//修改2.在公共main组件修改 下面是组件里的代码
<keep-alive>
    <router-view v-if="$route.meta.keepAlive">
        <!-- 这里加载会被缓存的视图组件,比如 Home! -->
    </router-view>
</keep-alive>

<router-view v-if="!$route.meta.keepAlive">
    <!-- 这里加载不被缓存的视图组件,比如 Edit! -->
</router-view>//修改3.在

方式2:路由表meta + 组件内设置name属性

//修改1.在路由表js  增加 router.meta 属性
    // routes 配置
    export default [
    {
        path: ‘/home‘,
        name: ‘home‘,
        component: Home,
        meta: {
        keepAlive: true // 需要被缓存
        }
    }, {
        path: ‘/edit,
        name: ‘edit‘,
        component: Edit,
        meta: {
        keepAlive: false // 不需要被缓存
        }
    }
    ]
//修改2.在要缓存的组件 设置那么属性  // 组件 a  export default {    name: ‘home‘,//先定义好组件名字 才能被缓存
    data () {
      return {}
    }
  }

4.高级用法,指定从什么组件进入才缓存,以及销毁缓存:先介绍我发现的网上一些博主写的有bug的方法,在介绍自己的方法。

因本文太长请看下篇高级用法

原文地址:https://www.cnblogs.com/wangmaoling/p/9803960.html

时间: 2024-10-09 00:22:57

vue keep-alive保存路由状态1 (接下篇)的相关文章

vue keep-alive保存路由状态2 (高级用法,接上篇)

接上篇 https://www.cnblogs.com/wangmaoling/p/9803960.html 本文很长,请耐心看完分析. 4.高级用法,指定从什么组件进入才缓存,以及销毁缓存:先介绍我发现的网上一些博主写的有bug的方法,在介绍自己的方法. 假设这里有 3 个路由: A.B.C.要求: 1.   默认显示 A 2.  B 跳到 A,A 不刷新 3.  C 跳到 A,A 刷新 先上一些发现博客上有些博主写的实现方式: 方式1:有bug 在 A 路由里面设置 meta 属性: { p

使用序列化保存对象状态到存储介质

//使用序列化保存对象状态到存储介质 //添加[Serializable] Game game = new Game(); game.Level = 2; game.Player = "Tom"; FileStream fs = new FileStream(@"game.bin",FileMode.Create); BinaryFormatter bf = new BinaryFormatter(); bf.Serialize(fs,game); //使用反序列化

使用SQL Server保存Session状态,实现单点登录

在做一些应用网站时,我们可能会碰到这样一种情况:整个项目是由多个网站组成的,而我们要实现用户从一个站点登录后,跳转到其他网站不需要重复登录,即实现单点登录.目前实现单点登录的技术也有好几种,这篇文章描述一下如何使用ASP.NET2.0和SQL Server来实现单点登录.一般在用户登录成功后,我们需要把用户登录成功的信息保存在Session里,但是Session的值只能保存在用户当前访问的站点下,只要我们实现了Session的跨站共享,也就基本上实现了用户在一个站点登录成功后在其他站点不需要重复

【前端小小白的学习之路】vue学习记录④(路由传参)

通过上篇文章对路由的工作原理有了基本的了解,现在我们一起来学习路由是如何传递参数的,也就是带参数的跳转. 带参数的跳转,一般是两种方式: ①.a标签直接跳转. ②点击按钮,触发函数跳转. 在上篇文章中我们已经有两个页面(Helloworld.vue&Hello.vue),现在我准备往Hello.vue里面添加3个链接,分别对应两种情况的跳转.  第一步:在原来的Hello.vue里添加路由链接跳转的代码(见第38-44行代码),添加后的Hello.vue代码如下: 1 <template&g

保存页面状态

问题: 页面中有菜单页和内容页,都在同一个页面显示.问题是刷新之后,或者从某个页面跳转到另外一个内容页面的时候,菜单状态失效或者页面会到首次登陆状态. 要求: 1. 刷新或者重新加载时,保持页面(菜单页和内容页)状态: 2. 页面内部功能回退:能正常回退: 3. 退出时,清除所有状态. 方案: 1. 分别保存菜单状态和页面状态: 2. 提供修改菜单和页面状态的方法, 提供清除状态的方法: 3. 刷新或者加载时,能够利用缓存中的状态: 4. 退出或者登录时,清除所有状态. 保存页面状态

ps netstat pid 来保存服务状态

要将部分服务器移到其他机柜,重启后不知道哪些服务要启,可以通过以下方法来保存服务状态及路径和执行命令等 1.ps ps f -eo pid,tty,stat,time,command > ${HOSTNAME}_$(date +%Y%m%d)_ps 2.netstat netstat -tupnl > ${HOSTNAME}_$(date +%Y%m%d)_netstat 3.cmdline cat /proc/2644/cmdline /usr/bin/redis-server /etc/r

Fragment-如何监听fragment中的回退事件与怎样保存fragment状态

一.如何监听Fragment中的回退事件 1.问题阐述 在Activity中监听回退事件是件非常容易的事,因为直接重写onBackPressed()函数就好了,但当大家想要监听Fragment中的回退事件时,想当然的也想着重写onBackPressed()方法,这时候你会发现:Fragment中根本就没有onBackPressed()方法给你重写.这可怎么破! 想想,在前面的例子中,我们在Activity的一个fragment_container里依次Add进fragment1,fragment

自动登录、记住我(保存登陆状态)实现

自动登录.记住我(保存登陆状态)实现:保存在客户端不能用session,可以用cookies保存 实现方式:第一种方法:可以把SessionId(GUID)放到cookies中,但 这样为了让用户下次访问我们网站时,知道这 个sessionId对应的是哪一个用户,我们还要在 数据库中建张表.表字段:主键,UserId  SessionId  时间 缺点:不能在两台机器上同时保存 第二种方法:把UserId放cookies中  密码(加密)相对于第一种方法优点:多台机器可以保存缺点:不安全,密码放

Vue开发之基础路由

1.router-link和router-view组件 src/App.vie文件内容: <template> <div id="app"> <div id="nav"> <router-link to="/">Home</router-link> | <router-link to="/about">About</router-link> &