国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Vue3:Elemenu-Plus遞歸型菜單組件封裝(2)

這篇具有很好參考價(jià)值的文章主要介紹了Vue3:Elemenu-Plus遞歸型菜單組件封裝(2)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

? ? ? ? 在上一篇文章中,以Vue2的選項(xiàng)式 API風(fēng)格,封裝了遞歸型菜單組件,但是這其中存在著一些問(wèn)題,例如:

????????【1】子組件menuList.vue中,通過(guò)this.$emit()方式定義的事件,在Vue3組合式API風(fēng)格父組件中可能會(huì)被執(zhí)行多次。之所以說(shuō)是可能,是因?yàn)槲疫@測(cè)試中確實(shí)遇到了這個(gè)問(wèn)題,子組件中確實(shí)只執(zhí)行了一次,父組件中卻執(zhí)行了兩次。

????????【2】父子組件之間的props傳值風(fēng)格不同,vue3中,我們通常是通過(guò)defineProps API明確定義要傳遞的props屬性,而Vue2中選項(xiàng)式API風(fēng)格的組件,則直接可以通過(guò)export default導(dǎo)出的配置參數(shù)進(jìn)行聲明。這種不一致的寫(xiě)法在我寫(xiě)個(gè)人項(xiàng)目中,一向是不太贊同的。

? ? ? ? ?基于以上原因,我將上一篇文章《Vue:Elemenu-Plus遞歸型菜單組件封裝》中的組件進(jìn)行了改寫(xiě),改為Vue3組合式API風(fēng)格的組件,并對(duì)上述問(wèn)題進(jìn)行了解決。

? ? ? ? 示例代碼如下,

菜單子組件定義

? ? ? ? 示例代碼如下,

<!-- 多級(jí)菜單組件抽取 -->
<template>
    <el-menu :default-active="props.activeIndex" :class="props.customMenuClass" background-color="transparent"
        text-color="#fff" active-text-color="#ffef40" :mode="props.mode" @select="onSelect" :ellipsis="false">
        <template v-for="(item) in props.items">
            <template v-if="item.children">
                <el-sub-menu :index="item.index" popper-class="el-sub-menu-popper-class">
                    <template #title>
                        <router-link :to="item.path">
                            <el-icon>
                                <component :is="item.meta.icon" :size="24"></component>
                            </el-icon>
                            <span>{{ item.meta.title }}</span>
                        </router-link>
                    </template>
                    <!-- 直接使用文件名即可,不用考慮name的問(wèn)題 -->
                    <!-- <menu-list :items="item.children" :mode="item.meta.mode" @select="onSelect"></menu-list> -->
                    <index :items="item.children" :mode="item.meta.mode" @select="onSelect"></index>
                </el-sub-menu>
            </template>
            <template v-else>
                <el-menu-item :index="item.index" :key="item.path">
                    <router-link :to="item.path">
                        <el-icon>
                            <component :is="item.meta.icon" :size="24"></component>
                        </el-icon>
                        <span>{{ item.meta.title }}</span>
                    </router-link>
                </el-menu-item>
            </template>
        </template>
    </el-menu>
</template>
<script setup>
import { toRef, watch } from 'vue'
//declare props from parent-component
const props = defineProps({
    customMenuClass: {
        type: String,
        required: false,
        default: "el-menu-class",
    },
    mode: {
        type: String,
        default: "horizontal",
    },
    items: {
        type: Array,
        required: true,
    },
    activeIndex: {
        type: String,
        required: false,
        default: "",
    }
})

//declare emtits by current-component
const emits = defineEmits(["select"])

//declare watch-calls
watch(() => props.activeIndex, (value, oldValue) => {
    console.log('新的activeIndex,', value)
})

//declare methods
const onSelect = (key, keyPath, item) => {
    emits("select", { value: true, key, keyPath, item })
}
</script>
<style lang="scss" scoped>
.el-menu-class {
    .el-menu-item:not(.is-disabled):hover {
        background-color: rgba(127, 255, 212, .3);
    }
}
</style>
<style lang="scss">
.el-sub-menu-popper-class {
    background-color: $base-background-color !important;
}
</style>

父組件調(diào)用

            <menu-list :items="menuList" :active-index="activeIndex" mode="horizontal" @select="clickHandler" />


//其中,clickHandler為emit方式定義的子組件事件,函數(shù)定義如下
const clickHandler = ({ value, key, keyPath, item }) => {
    console.log('clickHandler', value, key, keyPath)
    console.log("item-value", item)
}

? ? ? ? 在此之上,我們還可以完成一些其他操作,例如:菜單路由切換的本地緩存,以保證每次進(jìn)入項(xiàng)目主頁(yè)時(shí),路由會(huì)自動(dòng)跳轉(zhuǎn)到上一次操作的頁(yè)面;結(jié)合后端API接口調(diào)用,實(shí)現(xiàn)真正意義上的動(dòng)態(tài)菜單;通過(guò)自定義指令,實(shí)現(xiàn)前端頁(yè)面操作的權(quán)限控制等等。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-549779.html

到了這里,關(guān)于Vue3:Elemenu-Plus遞歸型菜單組件封裝(2)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Vue3 + Element Plus 封裝公共表格組件(帶源碼)

    Vue3 + Element Plus 封裝公共表格組件(帶源碼)

    由于項(xiàng)目中有很多菜單都是列表數(shù)據(jù)的展示,為避免太多重復(fù)代碼,故將 Element Plus 的 Table 表格進(jìn)行封裝,實(shí)現(xiàn)通過(guò)配置展示列表數(shù)據(jù) 支持自動(dòng)獲取表格數(shù)據(jù) 支持?jǐn)?shù)據(jù)列配置及插槽 支持操作列配置及插槽 支持多選框配置 支持表尾配置及插槽 支持分頁(yè)顯示 3.1 復(fù)制基本表格

    2024年02月08日
    瀏覽(41)
  • vue3+ts - element-plus封裝上傳文件圖片組件

    vue3+ts - element-plus封裝上傳文件圖片組件

    ??近期做到的項(xiàng)目中有涉及到上傳圖片上傳文件的需求,因?yàn)槭莗c管理后臺(tái),用到了element-plus框架,所以我也一起使用element-plus中的上傳圖片上傳圖片功能,并對(duì)它進(jìn)行封裝成一個(gè)組件,方便在多個(gè)地方使用。 1、上傳文件、視頻 2、上傳圖片 ??在這里上傳圖片和文件是分

    2024年02月12日
    瀏覽(36)
  • vue3學(xué)習(xí)——封裝菜單欄

    @/Layout/Sidebar/index.vue @/Layout/Sidebar/Sidebar.vue

    2024年02月20日
    瀏覽(15)
  • (二) Vue3 + Element-Plus 實(shí)現(xiàn)動(dòng)態(tài)菜單欄

    (二) Vue3 + Element-Plus 實(shí)現(xiàn)動(dòng)態(tài)菜單欄

    系列介紹:Vue3 + Vite + TS 從零開(kāi)始學(xué)習(xí) 項(xiàng)目搭建:(一) Vue3 + Vite + TS 項(xiàng)目搭建 實(shí)現(xiàn)動(dòng)態(tài)菜單欄:(二) Vue3 + Element-Plus 實(shí)現(xiàn)動(dòng)態(tài)菜單欄 實(shí)現(xiàn)動(dòng)態(tài)面包屑:(三) Vue3 + Element-Plus 實(shí)現(xiàn)動(dòng)態(tài)面包屑 實(shí)現(xiàn)動(dòng)態(tài)標(biāo)簽頁(yè):(四) Vue3 + Element-Plus 實(shí)現(xiàn)動(dòng)態(tài)標(biāo)簽頁(yè) 實(shí)現(xiàn)動(dòng)態(tài)主題色切換(demo):(五)

    2023年04月23日
    瀏覽(59)
  • vue3 element-plus動(dòng)態(tài)菜單及動(dòng)態(tài)圖標(biāo)

    引入element-plus 注冊(cè)圖標(biāo)組件 動(dòng)態(tài)引入圖標(biāo)代碼 完整代碼 路由如下

    2024年01月18日
    瀏覽(50)
  • Vue3 - Element Plus 去除下拉菜單周?chē)霈F(xiàn)黑色邊框輪廓,當(dāng)用鼠標(biāo)移入和點(diǎn)擊聚焦時(shí)就會(huì)出現(xiàn) “黑邊“ 的情況,無(wú)論里面是什么 HTML 元素和組件都會(huì)由此問(wèn)題(完美解決方案)

    Vue3 - Element Plus 去除下拉菜單周?chē)霈F(xiàn)黑色邊框輪廓,當(dāng)用鼠標(biāo)移入和點(diǎn)擊聚焦時(shí)就會(huì)出現(xiàn) “黑邊“ 的情況,無(wú)論里面是什么 HTML 元素和組件都會(huì)由此問(wèn)題(完美解決方案)

    在 Element Plus 組件庫(kù)中,使用 dropdown 下拉菜單時(shí)鼠標(biāo)點(diǎn)擊或移入時(shí)周?chē)霈F(xiàn)黑色邊框問(wèn)題。 本文 實(shí)現(xiàn)了 vue3+element plus 項(xiàng)目開(kāi)發(fā)中,隱藏下拉菜單 el-dropdown-menu / el-dropdown-item 周?chē)倪吙颍?如下圖所示,當(dāng)鼠標(biāo)移入(hover)和點(diǎn)擊時(shí)就會(huì)圍繞一圈黑色邊框,但通過(guò)本文的方案

    2024年02月09日
    瀏覽(221)
  • Vue3 + Element Plus 實(shí)現(xiàn)動(dòng)態(tài)標(biāo)簽頁(yè)及右鍵菜單

    Vue3 + Element Plus 實(shí)現(xiàn)動(dòng)態(tài)標(biāo)簽頁(yè)及右鍵菜單

    目錄 先上圖 ?使用el-dropdown綁定右鍵菜單,為每個(gè)tab頁(yè)綁定一個(gè)右鍵 右鍵菜單生效后控制每個(gè)下拉項(xiàng)的禁用與顯示(每一項(xiàng)代表一個(gè)功能) 每個(gè)右鍵項(xiàng)對(duì)應(yīng)的功能? 控制每次只顯示一個(gè)右鍵 完整代碼 ????????只有首頁(yè)的情況 ????????多個(gè)tab頁(yè)的情況 ?

    2024年02月07日
    瀏覽(23)
  • vue3.0+element Plus實(shí)現(xiàn)頁(yè)面布局,側(cè)邊欄菜單路由跳轉(zhuǎn)

    vue3.0+element Plus實(shí)現(xiàn)頁(yè)面布局,側(cè)邊欄菜單路由跳轉(zhuǎn)

    一.?先在router.js文件中配置路由,將側(cè)邊欄中需要跳轉(zhuǎn)的頁(yè)面都添加到children中 二. 在view目錄下新建一個(gè)文件,里面包含側(cè)邊欄要跳轉(zhuǎn)的頁(yè)面 三.? 頁(yè)面樣式布局 1.?我選擇使用自定義組件BaseLayout.vue文件來(lái)設(shè)置header和aside樣式顯示 也可以使用element?plus中的Container 布局容器?

    2024年02月13日
    瀏覽(31)
  • vue3 組件自己引用自己 遞歸組件 組件命名

    本人前端開(kāi)發(fā)一枚,以前一直用vue2.0,為了更新自己掌握的技術(shù)學(xué)習(xí)如何使用vue3.0。 在vue3.0項(xiàng)目中想要實(shí)現(xiàn)菜單組件,要使用到遞歸組件的方法,發(fā)現(xiàn)不知道怎么給組件重命名??! 在vue2.0中想要實(shí)現(xiàn)遞歸組件方式很簡(jiǎn)單,只要給組件命名,然后自己調(diào)用即可: 然而在vue3.0中

    2024年02月06日
    瀏覽(22)
  • vue3——遞歸組件的使用

    vue3——遞歸組件的使用

    該文章是在學(xué)習(xí) 小滿vue3 課程的隨堂記錄 示例均采用 script setup ,且包含 typescript 的基礎(chǔ)用法 遞歸組件 的使用場(chǎng)景,如 無(wú)限級(jí)的菜單 ,接下來(lái)就用菜單的例子來(lái)學(xué)習(xí) 先把菜單的基礎(chǔ)內(nèi)容寫(xiě)出來(lái)再說(shuō) 父組件 子組件 如圖,上述代碼已經(jīng)完成了 第一層 菜單數(shù)據(jù)的渲染: 深層

    2024年02月11日
    瀏覽(16)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包