最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue3+ts實(shí)現(xiàn)樹(shù)形組件(菜單組件)

 更新時(shí)間:2023年05月05日 10:52:33   作者:前端隨想  
本文主要介紹了vue3+ts實(shí)現(xiàn)樹(shù)形組件(菜單組件),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

前言

之前在使用element-plus的使用,使用el-menu組件,并且使用了遞歸思想完成了無(wú)限極菜單的展開(kāi),現(xiàn)在想要自己手寫(xiě)一個(gè)簡(jiǎn)單的樹(shù)形組件,同樣使用遞歸的思想

lv_0_20230503231408.gif

全局注冊(cè)組件

文件結(jié)構(gòu):

---mTree
  ---index.ts
  ---mTree.vue

在index.ts文件中引入組件然后注冊(cè),并最后在main.ts文件中引入并且使用app.use

import  mTree  from "./mTree.vue"
mTree.install = app => {
   app.component(mTree.name,mTree)
}
export default mTree

組件的實(shí)現(xiàn)

首先我們先要?jiǎng)?chuàng)建一個(gè)樹(shù)狀的數(shù)據(jù),分清楚層級(jí)關(guān)系

const state = reactive({
  treeOptions: [
    {
      label: '一級(jí)',
      children: [
       ...
        {
          label: '一級(jí)-3',
          children: [
            ....
          ],
        },
      ],
    },
   ...
})

就像這樣的層級(jí)關(guān)系,當(dāng)然這里面我們只是模擬數(shù)據(jù),真實(shí)的項(xiàng)目開(kāi)發(fā)過(guò)程中應(yīng)該是后端給前端數(shù)據(jù),然后前端在根據(jù)數(shù)據(jù)進(jìn)行渲染

樹(shù)形組件的基本結(jié)構(gòu):

<template>
  <li v-for="item in options"
      :key="item.label">
    {{ item.label }}
      <ul  v-if="item.children&&item.children.length>0">
        <mTree :options="item.children"></mTree>
      </ul>
  </li>
?
</template>

如圖:

image-20230503224718357.png

解釋一下這個(gè)組件的這個(gè)結(jié)構(gòu):

首先使用li組件渲染第一層結(jié)構(gòu),然后在ul里面重新嵌套mTree樹(shù)形組件,并且判斷當(dāng)前item元素是否有children屬性,如果有這個(gè)屬性,那么就進(jìn)行渲染,否則的話(huà)就不渲染。這樣就不停的遞歸,到最后一個(gè)children都渲染結(jié)束之后結(jié)束了。這樣在不確定有多少層級(jí)時(shí)就可以使用,可以實(shí)現(xiàn)無(wú)限的層級(jí)嵌套。

完善組件(添加點(diǎn)擊事件,過(guò)渡效果)????

<li v-for...
      @click.stop="toggleisOpen(item)">
    {{ item.label }}
    <transition name="slide-fade">
      <ul v-show="item.isOpen">...</ul>
    </transition>
  </li>

這里只展示了新增的代碼,給li添加了一個(gè)點(diǎn)擊事件:

interface optionsProp {
  label: string
  isOpen?: boolean
  children?: optionsProp[]
}
const props = defineProps({
  options: {
    type: Array as PropType<optionsProp[]>,
    default() {
      return []
    },
  },
})
const toggleisOpen = (item: any) => {
  item.isOpen = !item.isOpen
}

注意ul通過(guò)v-show來(lái)控制顯示或者隱藏,當(dāng)?shù)谝淮吸c(diǎn)擊的時(shí)候由于源數(shù)據(jù)中沒(méi)有isOpen,所以這個(gè)時(shí)候取反就是true,就會(huì)顯示點(diǎn)擊元素的子級(jí)。還有一點(diǎn)要注意的時(shí),由于冒泡會(huì)導(dǎo)致出現(xiàn)一些問(wèn)題,所以在點(diǎn)擊事件后面加上.stop來(lái)阻止冒泡。

添加過(guò)渡

這里我們使用了Vue3官方中的過(guò)渡,不是很了解的小伙伴可以去官網(wǎng)查看,簡(jiǎn)單來(lái)說(shuō)就是使用transition包裹要使用過(guò)渡效果的部分,然后定義name屬性,本文中的name為slide-fade所以下面的樣式就是這樣的:

  • v-enter-from:進(jìn)入動(dòng)畫(huà)的起始狀態(tài)。
  • v-enter-active:進(jìn)入動(dòng)畫(huà)的生效狀態(tài)。
  • v-leave-active:離開(kāi)動(dòng)畫(huà)的生效狀態(tài)
  • v-leave-to:離開(kāi)動(dòng)畫(huà)的結(jié)束狀態(tài)。
.slide-fade-enter-active {
  transition: all 0.3s ease-out;
}
?
.slide-fade-leave-active {
  transition: all 0.2s cubic-bezier(1, 0.5, 0.8, 1);
}
?
.slide-fade-enter-from,
.slide-fade-leave-to {
  transform: translateY(20px);
  opacity: 0;
}

總結(jié):

通過(guò)對(duì)這個(gè)組件的實(shí)現(xiàn),我們有掌握了對(duì)遞歸組件的使用以及簡(jiǎn)單的實(shí)現(xiàn),學(xué)習(xí)的時(shí)候可以對(duì)自己好奇的東西嘗試自己去實(shí)現(xiàn),這樣做我們可以學(xué)習(xí)的更快,并且使自己有一些小小的成就感。

到此這篇關(guān)于vue3+ts實(shí)現(xiàn)樹(shù)形組件(菜單組件)的文章就介紹到這了,更多相關(guān)vue3 ts樹(shù)形組件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Vue2 添加數(shù)據(jù)可視化支持的方法步驟

    Vue2 添加數(shù)據(jù)可視化支持的方法步驟

    這篇文章主要介紹了Vue2 添加數(shù)據(jù)可視化支持的方法步驟,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-01-01
  • Javascript結(jié)合Vue實(shí)現(xiàn)對(duì)任意迷宮圖片的自動(dòng)尋路

    Javascript結(jié)合Vue實(shí)現(xiàn)對(duì)任意迷宮圖片的自動(dòng)尋路

    本文將結(jié)合實(shí)例代碼介紹Javascript結(jié)合Vue實(shí)現(xiàn)對(duì)任意迷宮圖片的自動(dòng)尋路,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • 詳解本地Vue項(xiàng)目請(qǐng)求本地Node.js服務(wù)器的配置方法

    詳解本地Vue項(xiàng)目請(qǐng)求本地Node.js服務(wù)器的配置方法

    本文只針對(duì)自己需要本地模擬接口于是搭建一個(gè)本地node服務(wù)器供自己測(cè)試使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-03-03
  • Vuex 在Vue 組件中獲得Vuex 狀態(tài)state的方法

    Vuex 在Vue 組件中獲得Vuex 狀態(tài)state的方法

    今天小編就為大家分享一篇Vuex 在Vue 組件中獲得Vuex 狀態(tài)state的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-08-08
  • vue實(shí)現(xiàn)echart餅圖legend顯示百分比的方法

    vue實(shí)現(xiàn)echart餅圖legend顯示百分比的方法

    本文主要介紹了vue實(shí)現(xiàn)echart餅圖legend顯示百分比的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • vue傳值的編碼和解碼方式

    vue傳值的編碼和解碼方式

    這篇文章主要介紹了vue傳值的編碼和解碼方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • Vue組件間傳值的實(shí)現(xiàn)解析

    Vue組件間傳值的實(shí)現(xiàn)解析

    組件是?vue.js?最強(qiáng)大的功能之一,而組件實(shí)例的作用域是相互獨(dú)立的,這就意味著不同組件之間的數(shù)據(jù)無(wú)法相互引用,這篇文章主要介紹了Vue組件間傳值的實(shí)現(xiàn)
    2022-09-09
  • 使用Vue-scroller頁(yè)面input框不能觸發(fā)滑動(dòng)的問(wèn)題及解決方法

    使用Vue-scroller頁(yè)面input框不能觸發(fā)滑動(dòng)的問(wèn)題及解決方法

    這篇文章主要介紹了使用Vue-scroller頁(yè)面input框不能觸發(fā)滑動(dòng)的問(wèn)題,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08
  • 基于vue-cli3創(chuàng)建libs庫(kù)的實(shí)現(xiàn)方法

    基于vue-cli3創(chuàng)建libs庫(kù)的實(shí)現(xiàn)方法

    這篇文章主要介紹了基于vue-cli3創(chuàng)建libs庫(kù)的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • vuejs實(shí)現(xiàn)本地?cái)?shù)據(jù)的篩選分頁(yè)功能思路詳解

    vuejs實(shí)現(xiàn)本地?cái)?shù)據(jù)的篩選分頁(yè)功能思路詳解

    今天做項(xiàng)目需要一份根據(jù)本地?cái)?shù)據(jù)的篩選分頁(yè)功能,下面小編把vuejs實(shí)現(xiàn)本地?cái)?shù)據(jù)的篩選分頁(yè)功能的實(shí)現(xiàn)思路分享到腳本之家平臺(tái),需要的朋友可以參考下
    2017-11-11

最新評(píng)論

德安县| 莎车县| 水城县| 台中市| 乐山市| 钟山县| 邢台县| 张家口市| 西畴县| 桦甸市| 渑池县| 巴青县| 科尔| 和顺县| 新巴尔虎右旗| 西畴县| 宜阳县| 渑池县| 岢岚县| 南部县| 蓝山县| 芒康县| 沭阳县| 山阳县| 天峻县| 兴海县| 肇庆市| 西平县| 留坝县| 天全县| 万全县| 竹山县| 贵南县| 屯留县| 莱西市| 兴仁县| 巨鹿县| 沭阳县| 济阳县| 马尔康县| 安新县|