vue中keep-alive路由缓存

<keep-alive>
  <component v-bind:is="view"></component>
</keep-alive>

专属生命周期

activited        keep-alive专属,组件被激活时调用
deadctivated    keep-alive专属,组件被销毁时调用

用于子组件缓存,可以让子组件缓存还是不缓存

<!-- 失活的组件将会被缓存!-->
<keep-alive>
  <component v-bind:is="currentTabComponent"></component>
</keep-alive>

网上找的很不错,

1、直接使用

<keep-alive>
  <component>
    <!-- 该组件将被缓存! -->
  </component>
</keep-alive>
  • include - 字符串或正则表达,只有匹配的组件会被缓存
  • exclude - 字符串或正则表达式,任何匹配的组件都不会被缓存

    // 组件 a
    export default {
      name: ‘a‘,
      data () {
        return {}
      }
    }
    <keep-alive include="a">
      <component>
        <!-- name 为 a 的组件将被缓存! -->
      </component>
    </keep-alive>可以保留它的状态或避免重新渲染

    需要router

    <keep-alive>
        <router-view>
            <!-- 所有路径匹配到的视图组件都会被缓存! -->
        </router-view>
    </keep-alive>
    • 使用 include/exclude
    • 增加 router.meta 属性

      // 组件 a
      export default {
        name: ‘a‘,
        data () {
          return {}
        }
      }
      <keep-alive include="a">
          <router-view>
              <!-- 只有路径匹配到的视图 a 组件会被缓存! -->
          </router-view>
      </keep-alive>

      增加router属性

      // routes 配置
      export default [
        {
          path: ‘/‘,
          name: ‘home‘,
          component: Home,
          meta: {
            keepAlive: true // 需要被缓存
          }
        }, {
          path: ‘/:id‘,
          name: ‘edit‘,
          component: Edit,
          meta: {
            keepAlive: false // 不需要被缓存
          }
        }
      ]    
      <keep-alive>
          <router-view v-if="$route.meta.keepAlive">
              <!-- 这里是会被缓存的视图组件,比如 Home! -->
          </router-view>
      </keep-alive>
      
      <router-view v-if="!$route.meta.keepAlive">
          <!-- 这里是不被缓存的视图组件,比如 Edit! -->
      </router-view>

      分析一个写的很详细的地方:很详细https://www.jianshu.com/p/0b0222954483

原文地址:https://www.cnblogs.com/qdwds/p/11706978.html

时间: 2024-09-30 13:38:44

vue中keep-alive路由缓存的相关文章

vue中使用keepAlive组件缓存遇到的坑

项目开发中在用户由分类页category进入detail需保存用户状态,查阅了Vue官网后,发现vue2.0提供了一个keep-alive组件. 上一篇讲了keep-alive的基本用法,现在说说遇到的坑. 先说项目中的配置 在App.vue中的设置 在router中增加配置meta 上面这个设置后发现问题了,从category进入detail页后,状态被保存了,返回的时候保存了用户状态,达到了预期效果 但问题在于但从category返回到index后,再由index进入category时依然显

vue中监听路由参数的变化

在vue项目中,假使我们在同一个路由下,只是改变路由后面的参数值,期望达到数据的更新. mounted: () =>{ this.id = this.$route.query.id; this.getdetail() } getDetail()方法中会用到this.id这个参数,在同一页面切换id的值,并不会触发vue的声明周期函数. 可以添加路由监听: watch: { $route: { handler() { this.id = this.$route.query.id; this.get

Vue中的组件及缓存 keep-alive

<script> import { mapState } from "vuex"; export default { data() {  return {  PlayList: ""  };  }, computed: {  ...mapState(["Playname"]) //获取vuex中某一条数据  }, methods: { http() { let That = this; this.axios .get("ht

vue中keep-alive实现前进刷新后退不刷新

利用keep-alive标签实现前进刷新后退不刷新 需求:路由前进式能够刷新数据, 返回时页面保存之前的操作. >修改App.vue中router-view, 根据路由中meta字段设置的变量判断是否被展示 <template> <div id="app"> <keep-alive> <router-view v-if="$route.meta.keepAlive"></router-view> &l

Vue中使用matomo进行访问流量统计的实现

Vue中使用matomo进行访问流量统计 原文链接 前言 之前做到了一个页面及接口访问流量统计的需求, 然后在网上找了很多帖子,发现有些有的但是写的都不是很详细,所以今天就整理了一下 正文 第一步 首先自然是引入matomo npm i vue-matomo 复制代码 第二步 在main.js中注册一下matomo import VueMatomo from 'vue-matomo' Vue.use(VueMatomo, { host: 'http://matomo.na.xyz', // 这里

vue中如何不通过路由直接获取url中的参数

前言:为什么要不通过路由直接获取url中的参数? vue中使用路由的方式设置url参数,但是这种方式必须要在路径中附带参数,而且这个参数是需要在vue的路由中提前设置好的. 相对来说,在某些情况下直接在url后面拼接?mid=100的方式传递参数更灵活,你不需要设置路由,只需要在url后拼接参数即可,但是这种方式就需要通过javascript获取并提取url中的参数,通过传统的方式直接在页面中获取是行不通的了,因为vue中是无法通过location.search()来获取url问号之后的内容的.

H5 localstorage本地缓存数据的封装以及在vue中的使用

vue中常用的 每次增加数据   要缓存                     每次删除数据也要缓存  storage.js 文件 然后某个页面需要本地存储,就需要用 import引入:import storage from './storage.js' App.vue页面: <template> <div id="app"> <input type="text" v-model='todo' @keydown="doAdd

Vue中使用children实现路由的嵌套

Vue中使用children实现路由的嵌套 相关Html: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv=&

vue中路由按需加载的几种方式

使用vue-cli构建项目后,我们会在Router文件夹下面的index.js里面引入相关的路由组件,如: import Hello from '@/components/Hello' import Boy from '@/components/Boy' import Girl from '@/components/Girl' 普通加载的缺点: webpack在打包的时候会把整个路由打包成一个js文件,如果页面一多,会导致这个文件非常大,加载缓慢 1.require.ensure()实现按需加载

vue 中的路由为什么 采用 hash 路由模式,而不是href超链接模式(Hypertext,Reference)?

1. vue中路由模式的种类有两种 1. 一种是 hash 模式. 2. 一种是 h5 的 history 模式. 2. hash 和 history 都是来自 bom 对象 bom 来自 window 3. window.location.hash 4. hash 是属于 window.location 这个对象,而history直接属于 window 5. window.history 6. 是因为路由模式下,当hash值发生改变,不会发生网络请求,但是href会,vue会自动监听hash