在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
本文主要介绍Vue中组件的切换以及缓存解决方法 一.组件的切换方式方式一: 使用 v-if和v-else// 变量flag为true时显示comp-a组件 ,相反则显示comp-b组件 <comp-a v-if="flag"></comp-a> <comp-b v-else></comp-b> 方式二:使用内置组件:<component></component>// 点击切换登录,注册,退出组件 <template> <div> <a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" @click.prevent="comName = 'login'">登录</a> <a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" @click.prevent="comName = 'register'">注册</a> <a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" @click.prevent="comName = 'logOut'">退出</a> // <component></component> 来展示对应名称的组件,相当于一个占位符 // :is 属性指定 组件名称 <component :is="comName"></component> </div> </template> 方式三 : vue-router// 路由规则: { path: '/login', name: 'login', component: () => import('../views/login.vue') }, { path: '/register', name: 'register', component: () => import('../views/register.vue') }, // 需要展示组件的位置: <router-view /> 二.组件缓存: keep-alive根据需求对组件缓存,而不是销毁重建,正如本文开篇举例的实际场景 1.keep-alive定义
<keep-alive> 是一个抽象组件:它自身不会渲染一个 DOM 元素,也不会出现在父组件链中。 当组件在 2.keep-alive的生命周期activated 在 deactivated 在 被包含在
设置了缓存的组件:
三.keep-alive使用方法1.Props
2.搭配<component></component>使用<template> <div> <a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" @click.prevent="comName = 'login'">登录</a> <a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" @click.prevent="comName = 'register'">注册</a> <a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" @click.prevent="comName = 'logOut'">退出</a> // login组件会被缓存 不设置include会默认缓存所有挂载到<component></component>的组件 // 缓存多个指定组件include = ['login','register'] <keep-alive include="login"> <component :is="comName"></component> </keep-alive> </div> </template> 3.搭配<router-view />路由使用需配置路由 { path: '/login', name: 'login', component: () => import('../views/login.vue') meta:{ keepAlive : true // login组件会被缓存 } }, { path: '/register', name: 'register', component: () => import('../views/register.vue'), meta:{ keepAlive : false // register组件不会被缓存 } }, <router-view />: <div id="app"> <keep-alive> <!-- 需要缓存的视图组件 --> <router-view v-if="$route.meta.keepAlive"> </router-view> </keep-alive> <!-- 不需要缓存的视图组件 --> <router-view v-if="!$route.meta.keepAlive"> </router-view> </div> 4.清除缓存组件// beforeRouteLeave()钩子 // 判断是否要到详情页 beforeRouteLeave(to, from, next) { if (to.path === "/goods_detail") { from.meta.keepAlive = true; } else { from.meta.keepAlive = false; // this.$destroy() } next(); } 到此这篇关于有关vue 组件切换,动态组件,组件缓存的文章就介绍到这了,更多相关vue组件切换,动态组件,组件缓存内容请搜索极客世界以前的文章或继续浏览下面的相关文章希望大家以后多多支持极客世界! |
请发表评论