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

element多級(jí)菜單動(dòng)態(tài)顯示的實(shí)現(xiàn)

 更新時(shí)間:2023年11月07日 15:37:17   作者:_Jyann_  
通常在后臺(tái)管理系統(tǒng)中,需要根據(jù)每個(gè)用戶不同的權(quán)限來(lái)動(dòng)態(tài)展示菜單,本文主要介紹了element多級(jí)菜單動(dòng)態(tài)顯示的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下

背景:根據(jù)后端返回?cái)?shù)據(jù)生成多級(jí)菜單,菜單項(xiàng)可能會(huì)有很深的層級(jí),如果直接使用elementUI 去編寫會(huì)寫很深的層級(jí),代碼繁雜,一旦后面菜單項(xiàng)有改動(dòng)又不利于維護(hù)

如何做到多級(jí)菜單?使用遞歸組件

elmentUI原本寫法:

<el-menu
      default-active="2"
      class="el-menu-vertical-demo"
      @open="handleOpen"
      @close="handleClose"
      background-color="#545c64"
      text-color="#fff"
      active-text-color="#ffd04b">
      <el-submenu index="1">
        <template slot="title">
          <i class="el-icon-location"></i>
          <span>導(dǎo)航一</span>
        </template>
        <el-submenu index="1-4">
          <template slot="title">選項(xiàng)4</template>
          <el-menu-item index="1-4-1">選項(xiàng)1</el-menu-item>
        </el-submenu>
      </el-submenu>
      <el-menu-item index="4">
        <i class="el-icon-setting"></i>
        <span slot="title">導(dǎo)航四</span>
      </el-menu-item>
    </el-menu>

使用遞歸組件寫法:

主要思路:

  • 通過(guò)數(shù)據(jù)查找hasOneChild()判斷是否有children,有證明有子菜單,有子菜單使用el-submenu封裝的組件
  • SidebarItem.vue組件內(nèi)部調(diào)用自己的組件;
  • 渲染元素組件Item.vue使用函數(shù)式組件寫法;
    <template v-if="hasOneChild(item.children, item) && (!oneChild.children || oneChild.noShowChild)">
      <app-link v-if="item.redirect != 'noRedirect' &&  item.meta" :to="resolvePath(item.path)">
        <el-menu-item :index="resolvePath(item.path)" class="submenu-title-noDropdown">
          <Item v-if="item.meta" :icon="item.meta.icon" :title="item.meta.title"></Item>
        </el-menu-item>
      </app-link>
    </template>

    <!-- 有子菜單:有多個(gè)children -->
    <el-submenu v-else :index="resolvePath(item.path)">
      <template slot="title" v-if="item.meta">
          <!-- 沒(méi)有組件數(shù)據(jù)要處理可以使用函數(shù)式組件進(jìn)行渲染 -->
          <Item :icon="item.meta.icon" :title="item.meta.title"></Item>
      </template>
      <!-- el-submenu里面還有多級(jí)菜單 -->
      <sidebar-item
        v-for="child in item.children"
        :key="child.path"
        :item="child"
        :base-path="resolvePath(child.path)"
        class="nest-menu"
      ></sidebar-item>
    </el-submenu>
 // 判斷當(dāng)前菜單是否有子菜單
    hasOneChild(children = [], item) {
      // 判斷如果菜單是隱藏直接不顯示
      // if(item.hidden) return false;
      if (children.length === 0) return false;
      const showChildArr = children.filter(child => {
        console.log(child);

        if (child.hidden) return false;
        else return true;
      });

      // 沒(méi)有找到child說(shuō)明沒(méi)有子菜單
      if (showChildArr.length === 0) {
        this.oneChild = { ...item, path: item.path, noShowChild: true };
        return true;
      }
      console.log(this.oneChild, "this.oneChild");

      return false;
    },

函數(shù)式組件Item.vue寫法:

  • functional:true定義組件為函數(shù)式組件;
  • props接收父級(jí)傳入屬性;
  • render函數(shù)生成虛擬節(jié)點(diǎn);
<script>
export default {
  name: "Item",
  functional: true,
  // 組件傳入的數(shù)據(jù)
  props: {
    title: {
      type: String,
      default: ""
    },
    icon: {
      type: String,
      default: ""
    }
  },
  // render函數(shù)生成虛擬節(jié)點(diǎn)
  render(h, context) {
    //  <i class="iconfont el-icon-location"></i>
    // <span>{{item.meta.title}}</span>
    const { title, icon } = context.props; //獲取傳入的屬性
    const vNode = [];
    if (icon) {
      const iconClass = `iconfont ` + icon;
      vNode.push(<i class={iconClass} style="font-size:18px;"></i>);
    }
    if (title) {
      // JSX語(yǔ)法
      vNode.push(<span style="margin-left:8px;">{title}</span>);
    }
    return vNode;
  }
};
</script>

到此這篇關(guān)于elment多級(jí)菜單動(dòng)態(tài)顯示的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)elment多級(jí)菜單動(dòng)態(tài)顯示內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue項(xiàng)目中使用qrcodesjs2生成二維碼簡(jiǎn)單示例

    vue項(xiàng)目中使用qrcodesjs2生成二維碼簡(jiǎn)單示例

    最近項(xiàng)目中需生成二維碼,發(fā)現(xiàn)了很好用的插件qrcodesjs2,所以下面這篇文章主要給大家介紹了關(guān)于vue項(xiàng)目中使用qrcodesjs2生成二維碼的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-05-05
  • 解決基于 keep-alive 的后臺(tái)多級(jí)路由緩存問(wèn)題

    解決基于 keep-alive 的后臺(tái)多級(jí)路由緩存問(wèn)題

    這篇文章主要介紹了解決基于 keep-alive 的后臺(tái)多級(jí)路由緩存問(wèn)題,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • elementUI自定義上傳文件功能實(shí)現(xiàn)(前端后端超詳細(xì)過(guò)程)

    elementUI自定義上傳文件功能實(shí)現(xiàn)(前端后端超詳細(xì)過(guò)程)

    自定義上傳思路很簡(jiǎn)單,下面這篇文章主要給大家介紹了關(guān)于elementUI自定義上傳文件功能實(shí)現(xiàn)(前端后端超詳細(xì)過(guò)程)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-11-11
  • vue toggle做一個(gè)點(diǎn)擊切換class(實(shí)例講解)

    vue toggle做一個(gè)點(diǎn)擊切換class(實(shí)例講解)

    下面小編就為大家分享一篇使用vue toggle實(shí)現(xiàn)點(diǎn)擊切換class的示例。具有很好的參考價(jià)值。希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-03-03
  • Vue2如何設(shè)置通知提醒框

    Vue2如何設(shè)置通知提醒框

    文章介紹了如何自定義設(shè)置通知組件的屬性,包括延時(shí)時(shí)長(zhǎng)、位置等,并提供了五種不同樣式的調(diào)用方法,最后,文章說(shuō)明了如何創(chuàng)建和引入通知框架組件
    2026-02-02
  • vuex的輔助函數(shù)該如何使用

    vuex的輔助函數(shù)該如何使用

    vue通過(guò)輔助函數(shù)mapState、mapActions、mapMutations,把vuex.store中的屬性映射到vue實(shí)例身上,這樣在vue實(shí)例中就能訪問(wèn)vuex.store中的屬性了,對(duì)于操作vuex.store就很方便了,本文具體的介紹下這些輔助函數(shù)的使用方法
    2021-06-06
  • 基于Vue2實(shí)現(xiàn)數(shù)字縱向滾動(dòng)效果

    基于Vue2實(shí)現(xiàn)數(shù)字縱向滾動(dòng)效果

    這篇文章主要為大家詳細(xì)介紹了如何基于Vue2實(shí)現(xiàn)數(shù)字縱向滾動(dòng)效果,從而達(dá)到顯示計(jì)時(shí)器滾動(dòng)效果,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-03-03
  • 淺析Proxy可以優(yōu)化vue的數(shù)據(jù)監(jiān)聽(tīng)機(jī)制問(wèn)題及實(shí)現(xiàn)思路

    淺析Proxy可以優(yōu)化vue的數(shù)據(jù)監(jiān)聽(tīng)機(jī)制問(wèn)題及實(shí)現(xiàn)思路

    這篇文章主要介紹了淺析Proxy可以優(yōu)化vue的數(shù)據(jù)監(jiān)聽(tīng)機(jī)制問(wèn)題及實(shí)現(xiàn)思路,需要的朋友可以參考下
    2018-11-11
  • Vue下拉選擇框Select組件使用詳解(二)

    Vue下拉選擇框Select組件使用詳解(二)

    這篇文章主要為大家詳細(xì)介紹了Vue下拉選擇框Select組件的使用,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • vue-jsonp的使用及說(shuō)明

    vue-jsonp的使用及說(shuō)明

    這篇文章主要介紹了vue-jsonp的使用及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12

最新評(píng)論

麻城市| 通道| 勐海县| 英吉沙县| 恩施市| 文登市| 兰考县| 台北县| 广州市| 江山市| 镇安县| 宁德市| 郸城县| 澄城县| 灵台县| 滦南县| 故城县| 通辽市| 阿坝| 达尔| 宝鸡市| 罗平县| 丰都县| 镇雄县| 名山县| 当阳市| 栾川县| 额尔古纳市| 田东县| 邵东县| 辉县市| 苏尼特左旗| 晋州市| 大邑县| 扶余县| 马尔康县| 邓州市| 吉木萨尔县| 孟村| 遂溪县| 香港|