vue组件缓存与动画效果

11 篇文章 0 订阅

主要是利用了router-view组件的插槽来实现,使用<transition><keep-alive>组件来包裹路由组件

注解:

  • <router-view> v-slot Component是router-view要显示的组件对象 route路由是什么

  • <transition>name定义要过度的动画效果也就是css样式

  • <transition>mode过渡模式(执行的顺序)先进来在出去

  • <keep-alive> max缓存组件数量,限定缓存5

  • <component>is动态渲染组件 判断条件如果为真就渲染组件

   <!-- 使用keep-alive缓存组件内容 -->
    <div style="height: 80vh;">
        <!--v-slot Component是router-view要显示的组件对象 route路由是什么-->
        <router-view v-slot="{ Component, route }">
            <!--方式一
                name定义要过度的动画效果也就是css样式 mode过渡模式(执行的顺序)先进来在出去 
            -->
            <transition name="slide-fade" mode="in-out">
                <!--keep-alive用于缓存组件   max缓存组件数量,限定缓存5 -->
                <!-- is动态渲染组件 判断条件如果为真就渲染组件 key绑定的是key值-->
                <keep-alive max="5">
                    <component :is="Component" :key="route.fullPath"></component>
                </keep-alive>
            </transition>

            <!-- 方式二 -->
            <!-- <transition name="slide-fade" mode="in-out">
                <keep-alive max="5">
                    <component :is="Component" v-if="route.meta.keepAlive" :key="route.fullPath"></component>
                </keep-alive>
            </transition>
            <transition name="slide-fade" mode="in-out">
                <component :is="Component" v-if="!route.meta.keepAlive" :key="route.fullPath"></component>
            </transition> -->
        </router-view>
    </div>

注意(keep-alive的作用):

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

结合路由和动态组件一起使用,用于缓存组件

<style scoped lang="less">
/*
  进入和离开动画可以使用不同
  持续时间和速度曲线。
*/
/* 进入时的过渡效果 */
.slide-fade-enter-active {
    transition: all 0.3s ease-out;
}

/* 离开时的过渡效果 */
.slide-fade-leave-active {
    transition: all 0.3s cubic-bezier(1, 0.5, 0.8, 1);
}

/* 从什么位置进入和从什么位置出去 */
.slide-fade-enter-from,
.slide-fade-leave-to {
    transform: translateX(-20px);
    opacity: 0;
}
</style >

特此注意:

问题

  1. 首页没有动画

解决

在不改变路径的方式,在Main组件下渲染

   // 首页
    {
        path: 'home',
        name: '',
        component: () => import('../views/Main.vue'),
        meta: {
            title: 'home',
            icon: 'icon-shouye' // 阿里图标库
        },
        children: [
            {
                path: '',
                name: 'home',
                component: () => import('../views/Home.vue'),
                meta: { // 自定义路由信息
                    title: 'home',
                    icon: 'icon-shouye' // 阿里图标库
                }
            }
        ]
    },

问题

  1. 点击首页后点击其他页面都是空白

原因

没有根节点

解决

在你的home页面添加一个根节点

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值