Vue動(dòng)態(tài)組件和keep-alive組件實(shí)例詳解
動(dòng)態(tài)組件
多個(gè)組件使用同一個(gè)掛載點(diǎn),并可以動(dòng)態(tài)切換,這就是動(dòng)態(tài)組件。
格式
<component :is="comName"></component>
注意點(diǎn)
- is只能是動(dòng)態(tài)屬性,:is="組件注冊(cè)后的標(biāo)簽名字符串或data變量"
- 不能直接拿注冊(cè)標(biāo)簽名賦值使用
使用效果
需求: 完成一個(gè)注冊(cè)功能頁(yè)面, 2個(gè)按鈕切換, 額外封裝兩個(gè)組件:一個(gè)填寫注冊(cè)信息, 一個(gè)填寫用戶簡(jiǎn)介信息。
目錄結(jié)構(gòu)
根組件 ├── 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'">賬號(hào)密碼填寫</button> <button @click="comName = 'UserInfo'">個(gè)人信息填寫</button> <p>下面顯示注冊(cè)組件:</p> <div style="border: 1px solid red"> <!-- vue內(nèi)置的組件component, 可以動(dòng)態(tài)顯示組件 --> <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>
效果
小結(jié)
vue內(nèi)置component
組件, 配合is屬性, 設(shè)置要顯示的組件標(biāo)簽名字。
keep-alive組件
使用背景
組件切換會(huì)導(dǎo)致組件被頻繁銷毀和重新創(chuàng)建, 大多數(shù)情況下是有自己的意義的,但也可能會(huì)導(dǎo)致不必要的性能損耗。
解決方法
使用Vue內(nèi)置的keep-alive
組件, 可以讓包裹的組件保存在內(nèi)存中不被銷毀。
使用keep-alive組件
<keep-alive> <!-- vue內(nèi)置的組件component, 可以動(dòng)態(tài)顯示組件 --> <component :is="comName"></component> </keep-alive>
使用keep-alive
組件會(huì)補(bǔ)充兩個(gè)生命周期:
- activated -激活
- deactivated -失去激活狀態(tài)
小結(jié)
keep-alive
可以提高組件的性能, 內(nèi)部包裹的標(biāo)簽不會(huì)被銷毀和重新創(chuàng)建, 觸發(fā)激活和非激活的生命周期方法。
keep-alive組件-指定緩存
keep-alive
默認(rèn)會(huì)將所有包裹的組件進(jìn)行緩存,使用include
屬性可以指定緩存組件。
語(yǔ)法
- 寫法1: include="組件名1,組件名2..."
- 寫法2: :include="['組件名1', '組件名2']"
<keep-alive include="name1,name2"> <!-- vue內(nèi)置的組件component, 可以動(dòng)態(tài)顯示組件 --> <component :is="comName"></component> </keep-alive>
注意:
匹配首先檢查組件自身的 name 選項(xiàng),如果 name 選項(xiàng)不可用,則匹配它的局部注冊(cè)名稱 (父組件 components 選項(xiàng)的鍵值)。
總結(jié)
到此這篇關(guān)于Vue動(dòng)態(tài)組件和keep-alive組件的文章就介紹到這了,更多相關(guān)Vue動(dòng)態(tài)組件 keep-alive組件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue3 setup中defineEmits與defineProps的使用案例詳解
在父組件中定義String、Number、Boolean、Array、Object、Date、Function、Symbol這些類型的數(shù)據(jù),使用defineEmits會(huì)返回一個(gè)方法,使用一個(gè)變量emits(變量名隨意)去接收,本文給大家介紹vue3 setup中defineEmits與defineProps的使用案例,感興趣的朋友一起看看吧2023-10-10關(guān)于Vue 消除Token過(guò)期時(shí)刷新頁(yè)面的重復(fù)提示問(wèn)題
很多朋友在token過(guò)期時(shí)刷新頁(yè)面,頁(yè)面長(zhǎng)時(shí)間未操作,再刷新頁(yè)面時(shí),第一次彈出“token失效,請(qǐng)重新登錄!”提示,針對(duì)這個(gè)問(wèn)題該怎么處理呢,下面小編給大家?guī)?lái)原因分析及解決方法,一起看看吧2021-07-07vue3.0+element Plus實(shí)現(xiàn)頁(yè)面布局側(cè)邊欄菜單路由跳轉(zhuǎn)功能
這篇文章主要介紹了vue3.0+element Plus實(shí)現(xiàn)頁(yè)面布局,側(cè)邊欄菜單路由跳轉(zhuǎn),需要的朋友可以參考下2023-07-07面試官問(wèn)你Vue2的響應(yīng)式原理該如何回答?
可能很多小伙伴之前都了解過(guò)?Vue2實(shí)現(xiàn)響應(yīng)式的核心是利用了ES5的Object.defineProperty?但是面對(duì)面試官時(shí)如果只知道一些模糊的概念。只有深入底層了解響應(yīng)式的原理,才能在關(guān)鍵時(shí)刻對(duì)答如流,本文就來(lái)和大家詳細(xì)聊聊,感興趣的可以收藏一下2022-12-12vue實(shí)現(xiàn)滑塊拖拽校驗(yàn)功能的全過(guò)程
vue驗(yàn)證滑塊功能,在生活中很多地方都可以見到,使用起來(lái)非常方便,這篇文章主要給大家介紹了關(guān)于vue實(shí)現(xiàn)滑塊拖拽校驗(yàn)功能的相關(guān)資料,需要的朋友可以參考下2021-08-08vue中echarts的用法及與elementui-select的協(xié)同綁定操作
這篇文章主要介紹了vue中echarts的用法及與elementui-select的協(xié)同綁定操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-11-11關(guān)于VUE的編譯作用域及slot作用域插槽問(wèn)題
這篇文章主要介紹了VUE 的編譯作用域及slot作用域插槽問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-07-07