可收縮多級菜單的實現
1、遞歸組件實戰
通過v-show來切換re-menu和icon組件的顯示隱藏,re-menu組件上幾個課時有事例
<template>
<div class="side-menu-wrapper">
<slot></slot>
<Menu v-show="!collapsed" width="auto" theme="dark" @on-select="handleSelect">
<template v-for="item in list">
<re-submenu
v-if="item.children"
:key="`menu_${item.name}`"
:name="item.name"
:parent="item"
>
</re-submenu>
<menu-item v-else :key="`menu_${item.name}`" :name="item.name">
<Icon :type="item.icon" />
{{ item.title }}
</menu-item>
</template>
</Menu>
<div v-show="collapsed" class="drop-wrapper">
<template v-for="item in list">
<re-dropdown @on-select="handleSelect" v-if="item.children" :show-title="false" icon-color="#fff" :key="`drop_${item.name}`" :parent="item"></re-dropdown>
<Tooltip v-else transfer :content="item.title" placement="right" :key="`drop_${item.name}`">
<span @click="handleClick(item.name)" class="drop-menu-span">
<Icon :type="item.icon" color="#fff" :size="20"></Icon>
</span>
</Tooltip>
</template>
</div>
</div>
</template>
2、v-if和v-show對比
**v-if 是“真正的”條件渲染,因爲它會確保在切換過程中條件塊內的事件監聽器和子組件適當地被銷燬和重建。
v-if 也是惰性的:如果在初始渲染時條件爲假,則什麼也不做——直到條件第一次變爲真時,纔會開始渲染條件塊。
相比之下, v-show 就簡單得多——不管初始條件是什麼,元素總是會被渲染,並且只是簡單地基於 CSS 進行切換。
一般來說, v-if 有更高的切換開銷,而 v-show 有更高的初始渲染開銷。因此,如果需要非常頻繁地切換,則使用 v-show 較好;如果在運行時條件不太可能改變,則使用 v-if 較好。**
v-if直接從代碼中刪除了,v-show只是通過display來切換狀態,因此建議頻繁切換的話用v-show比較好