Vue动态组件和keep-alive组件实例详解
动态组件
多个组件使用同一个挂载点,并可以动态切换,这就是动态组件。
格式
<component :is="comName"></component>
注意点
- is只能是动态属性,:is="组件注册后的标签名字符串或data变量"
- 不能直接拿注册标签名赋值使用
使用效果
需求: 完成一个注册功能页面, 2个按钮切换, 额外封装两个组件:一个填写注册信息, 一个填写用户简介信息。
目录结构
根组件
├── App.vue
└── components
├── UserName.vue # 用户名和密码输入框
└── UserInfo.vue # 人生格言和自我介绍框操作
UserName.vue
<template>
<div>
<h2>UserName</h2>
<p>用户名:<input /> </p>
<p>密码:<input /> </p>
</div>
</template>
<script>
export default {
}
</script>UserInfo.vue
<template>
<div>
<h2>UserInfo.vue</h2>
<p>人生格言:<input /> </p>
<p>自我介绍:<textarea /> </p>
</div>
</template>
<script>
export default {
}
</script>父组件APP.vue
<template>
<div>
<button @click="comName = 'UserName'">账号密码填写</button>
<button @click="comName = 'UserInfo'">个人信息填写</button>
<p>下面显示注册组件:</p>
<div style="border: 1px solid red">
<!-- vue内置的组件component, 可以动态显示组件 -->
<component :is="comName"></component>
</div>
</div>
</template>
<script>
import UserName from "./UserName";
import UserInfo from "./UserInfo";
export default {
data() {
return {
comName: "UserName",
};
},
components: {
UserName,
UserInfo,
},
};
</script>效果

小结
vue内置component组件, 配合is属性, 设置要显示的组件标签名字。
keep-alive组件
使用背景
组件切换会导致组件被频繁销毁和重新创建, 大多数情况下是有自己的意义的,但也可能会导致不必要的性能损耗。
解决方法
使用Vue内置的keep-alive组件, 可以让包裹的组件保存在内存中不被销毁。
使用keep-alive组件
<keep-alive>
<!-- vue内置的组件component, 可以动态显示组件 -->
<component :is="comName"></component>
</keep-alive>使用keep-alive组件会补充两个生命周期:
- activated -激活
- deactivated -失去激活状态
小结
keep-alive可以提高组件的性能, 内部包裹的标签不会被销毁和重新创建, 触发激活和非激活的生命周期方法。
keep-alive组件-指定缓存
keep-alive默认会将所有包裹的组件进行缓存,使用include属性可以指定缓存组件。
语法
- 写法1: include="组件名1,组件名2..."
- 写法2: :include="['组件名1', '组件名2']"
<keep-alive include="name1,name2">
<!-- vue内置的组件component, 可以动态显示组件 -->
<component :is="comName"></component>
</keep-alive>注意:
匹配首先检查组件自身的 name 选项,如果 name 选项不可用,则匹配它的局部注册名称 (父组件 components 选项的键值)。
总结
到此这篇关于Vue动态组件和keep-alive组件的文章就介绍到这了,更多相关Vue动态组件 keep-alive组件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
关于Vue3中element-plus的el-dialog对话框无法显示的问题及解决方法
最近今天在写一个停车场管理系统的项目时,在用vue3写前端时,在前端模板选择上,我一时脑抽,突然决定放弃SpringBoot,选择了以前几乎很少用的element-plus,然后果不其然,错误连连,下面给大家分享dialog对话框无法显示的原因,感兴趣的朋友一起看看吧2023-10-10
vue前端实现dhtmlxgantt甘特图代码示例(个人需求)
这篇文章主要介绍了如何使用dhtmlx-gantt和chinese-days插件在项目中实现节假日置灰显示的功能,文中通过代码介绍的非常详细,需要的朋友可以参考下2025-03-03
解决Element-ui radio单选框label布尔/数值的一个坑
这篇文章主要介绍了解决Element-ui radio单选框label布尔/数值的一个坑,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2023-04-04


最新评论