vue iframe {keepAlive}设置不刷新

vue iframe {keepAlive}设置不刷新
Router.js中

import Vue from 'vue'
import VueRouter from 'vue-router'
//登录
import Login from '../views/login/login.vue'
//注册
import Register from '../views/register/register.vue'
import Home from '../views/home/home.vue'
//欢迎页重定向到首页
import Welcome from '../components/welcome.vue'
//疫苗信息管理
import Vaccinemanagement from '../views/vaccinemanagement/vaccinemanagement.vue'
//预约信息管理
import Bookingmanagement from '../views/bookingmanagement/bookingmanagement.vue' 
 //接种记录管理
import Inoculationmanagement from '../views/inoculationmanagement/inoculationmanagement.vue'
//个人中心
import Personalcenter from '../views/personalcenter/personalcenter.vue' 
//用户管理
import Usermanagement from '../views/usermanagement/usermanagement.vue' 
//预约管理
import Vaccinereservation from '../views/vaccinereservation/vaccinereservation.vue' 
//我的预约
import Myreservation from '../views/myreservation/myreservation.vue' 
Vue.use(VueRouter)

const routes = [
  {
    path: '/',
    redirect: '/login'
  },
  {
    path: '/login',
    meta: {
      showMenu: false,
      title: '登录',
      notCache: true,
    },
    component: Login
  },
  {
    path: '/register',
    component: Register
  },
  {
    path: '/home',
    component: Home,
    redirect: '/Welcome',
    meta: {
      showMenu: false,
      title: '首页',
      notCache: true,
      icon: 'el-icon-house',
    },
    children: [{
      path: '/Welcome',
      meta: {
        showMenu: true,
        title: '首页',
        // notCache: true,
        icon: 'el-icon-house',
        showIframe:true,
      },
      component: Welcome,
    },
    {
      path: '/vaccinemanagement',
      meta: {
        showMenu: true,
        title: '疫苗信息管理',
        notCache: true,
        icon: 'el-icon-s-operation',

      },
      component: Vaccinemanagement
    },
    {
      path: '/bookingmanagement',
      meta: {
        showMenu: true,
        title: '预约信息管理',
        notCache: true,
        icon: 'el-icon-document-add',
      },
      component: Bookingmanagement
    },
    {
      path: '/myreservation',
      meta: {
        showMenu: true,
        title: '我的预约',
        notCache: true,
        icon: 'el-icon-date',
      },
      component: Myreservation
    },
    {
      path: '/inoculationmanagement',
      meta: {
        showMenu: true,
        title: '接种记录管理',
        notCache: true,
        icon: 'el-icon-document',
      },
      component: Inoculationmanagement
    },
    {
      path: '/vaccinereservation',
      meta: {
        showMenu: true,
        title: '新增预约',
        notCache: true,
        icon: 'el-icon-circle-plus',
      },
      component: Vaccinereservation
    },
    {
      path: '/personalcenter',
      meta: {
        showMenu: true,
        title: '个人中心',
        notCache: true,
        icon: 'el-icon-user',
      },
      component: Personalcenter
    },
    {
      path: '/usermanagement',
      meta: {
        showMenu: true,
        title: '用户管理',
        notCache: true,
        icon: 'el-icon-setting',
      },
      component: Usermanagement
    },
    ],  
  },  
]

const router = new VueRouter({
  routes
})


export default router
export { routes }

<template>
    <div class="home">
        <el-container>
            <el-header>
                <div>
                    <img src="" alt="">
                    <span>疫苗预约系系统</span>
                </div>
                <el-button type="info" @click="logout">退出</el-button>
            </el-header>
            <el-container>
                <!-- 左侧菜单 -->
                <el-aside width="200px">
                    <menu-form></menu-form>
                </el-aside>
                <!-- 右侧内容 -->
                <el-main>
                    <bread-crumb></bread-crumb>
                    <!-- 路由占位符 -->
                    <router-view></router-view>
                    <iframe src="static/homchart.html" v-show="$route.meta.showIframe" class="iframeCard"></iframe>
                </el-main>
            </el-container>
        </el-container>
    </div>
</template>
Vue 3中的 <keep-alive> 组件可以用来在组件之间缓存和保留状态。但是在Vue 2中,<keep-alive> 组件不适用于 <iframe> 元素。在Vue 3中,可以使用一些技巧来在 <iframe> 中使用 keep-alive 功能。 要在 <iframe> 中使用 keep-alive,可以通过在父组件中创建一个缓存数组来实现。首先,创建一个数组来存储已加载的 <iframe> 的 src 属性。然后,将每个 <iframe> 的 src 属性存储在这个数组中。这样,在切换到新的 <iframe> 时,可以先检查是否已在缓存数组中。如果已存在,则可以直接从缓存加载,而不是重新加载。 在Vue 3中,可以使用 ref reactive 引用这个数组,并对其进行监听。每次 <iframe> 的 src 发生变化时,都可以通过监听 ref 值的变化来判断是否需要缓存。如果已经存在于缓存数组中,则可以直接使用加载完毕的 <iframe>,否则,创建一个新的 <iframe> 并将其放入缓存数组中。 同时,还需要在父组件中监听 <iframe> 的加载事件,并在加载完毕后将其存储到缓存数组中。这样,当需要重新加载已缓存的 <iframe> 时,可以直接从缓存中获取,并在需要时显示它。 需要注意的是,因为 <iframe> 是一个独立的文档环境,它与Vue 3中的 keep-alive 功能有一些限制。例如,无法捕获 <iframe> 内部组件的生命周期钩子。所以,在使用 <iframe> 时,需要谨慎考虑这些限制,并根据具体需求来选择是否使用 keep-alive。 总结起来,Vue 3中的 <keep-alive> 组件可以通过使用缓存数组来实现在 <iframe> 中保持和缓存状态的功能。但需要注意,<iframe> 的独立环境可能会带来一些限制,需要根据具体情况来决定是否使用 keep-alive
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值