Vueのメニューバーの権限

彼女は直進愛は後悔過去の半分以上、決定した外観を持っているからペースを加速するために気にしない、振り返ることがありませんでした

いくつかの単語の男は(バックエンドによって返されたデータをレンダリング)、メニューバーの権限を言いました

背景返されたデータ構造(未処理  よるとPARENTIDが分離親子メニューにヌル親と子供はありません

[  

  {
    "ID":352、
    "PARENTID":347、
    "名前": "出场记录"、
    "URL": "/ grouplessonschedule /リスト"、
    "urlMethod": "POST"、
    "コンポーネント":「コンポーネント/ syllabusLeagueClass / index.vue "
  }、
  {
    "ID":392、
    "PARENTID":NULL、
    "名前": "出场资格"、
    "URL":ヌル、
    "urlMethod":ヌル、
    "コンポーネント"、"コンポーネント/フィードバック/インデックス.vue」
  }

 

]

サイドナビゲーションデータ構造(構造childrenMenuLisが処理指定は、2つを持っているがある場合、メニューは、説明する場合は空です)。

[

  {   

    childrenMenuLis:[]

    コンポーネント:  "コンポーネント/楽器/ index.vue "

    ID:  "303 "

    名前:  「オペレーティング・パネル

    PARENTID:  ヌル

    switchState: 

    URL:  "/楽器"

    urlMethod:  ヌル

  }

]

メニューによって返されるデータの処理:

データに:
 //受信データ
menuListVal:[]、//すべてのメニューデータを受信し
、[]、:parentVal //親メニューデータ
 childBtnVal:[]、//子メニューデータ
 parentChildMap:[]、 
イベント:
メニューリストを( ){ 
      この .. $ AjaxのGET" / MENU /リスト").then(RES => {
         この .menuListVal = res.data.data; メニューデータ受信//返す
      この .menuListVal.filterを(項目=> { // PARENTIDはヌル親子メニューが親()サブ段階(2)ではない有する分離
          IFitem.parentId == NULL ){ //親
            この.parentVal.push(項目);
          } 他の IFitem.parentId = nullを!){ の//子
            この.childBtnVal.push(項目); 
          } 
        }); 
        この .parentVal.filter(項目=> { //フィルタメニューには、属性の追加 
          アイテムを。 switchState = trueに; //は、隠された制御権限表示
           //サブグレードの条件に応じて、空の配列を定義インサート
          items.childrenMenuLis = []; //ストアの2つのメニュー
          この .childBtnVal.filter(itemChild => {
             //すべての子が挿入条件
            IFitems.id == itemChild.parentId){//メニューアレイ===親に格納された2つの親メニュー定義のID番号2の場合
              items.childrenMenuLis.push(itemChild); 
            } 
          }); 
        }); 
        この .parentChildMap =この.parentVal ; 介して//データCANループ
         //はconsole.log(this.parentChildMap); 
      }); 
    } 

(){作成
    この.menuList(); 
}

対応に従い、アイコン表示処理:(名)

[

  {   

    childrenMenuLis:  配列(0)

    コンポーネント:  "コンポーネント/楽器/ index.vue "

    iconClassName:  「エル・アイコン・パイチャート

    ID:  "303 "

    インデックス:  1

    名前:  「ダッシュボード

    PARENTID:  ヌル

    switchState: 

    URL:  "/楽器"

    urlMethod:  ヌル

 

  }

]

  一マージにおける複数のオブジェクトの二つのアレイ

  配列、マップメソッドは配列を返し、配列または配列やオブジェクトの前にあるオブジェクトプラス「...」、ES6の新しい文言をマージ

data中:
//定义的图标样式 classIcon: [ { index:
1, iconClassName: "el-icon-pie-chart" }, { index: 2, iconClassName: "el-icon-takeaway-box" }, { index: 3, iconClassName: "el-icon-monitor" }, { index: 4, iconClassName: "el-icon-collection" }, { index: 5, iconClassName: "el-icon-time" }, { index: 6, iconClassName: "el-icon-present" }, { index: 7, iconClassName: "el-icon-s-data" }, { index: 8, iconClassName: "el-icon-document-copy" }, { index: 9, iconClassName: "el-icon-key" }, { index: 10, iconClassName: "el-icon-sell" }, { index: 11, iconClassName: "el-icon-set-up" }, { index: 12, iconClassName: "el-icon-unlock" } ], iconIcon: [] 事件中: menuList() { // 将this.parentChildMap里的值与this.classIcon数组里的值合并,通过用户名显示对应图标,并返回新数组 this.iconIcon = this.parentChildMap.map((item, index) => { return { ...item, ...this.classIcon[index] };
      //此时iconIcon里面就有name和图标class了可以循环遍历了 }); }

遍历数据渲染

<el-container>
      <!-- 侧边导航区 -->
      <el-aside width="244px" padding-top="10px" :style="asideStyle">
        <el-row class="tac" width="244px" style="user-select:none;height:100%">
          <el-col :span="12" style="user-select:none;height:100%; width: 101%">
            <el-menu
              default-active="2"
              class="el-menu-vertical-demo"
              background-color="#13141f"
              text-color="#fff"
              active-text-color="#fff"
              router
              style="height:100%"
            >
              <!-- 第一次循环 父级菜单栏显示-->
              <div v-for="(item, index) in parentChildMap" :key="index">
                <!-- 如果item.childrenMenuLis.length大于0说明有子级,先显示父级在触发子级 item.switchState控制导航栏显示隐藏-->
                <el-submenu
                  :index="item.id"
                  v-show="item.switchState"
                  v-if="item.childrenMenuLis.length > 0"
                  style="text-align: left;padding-left: 24px;"
                >
                  <!-- 循环父级菜单的图标 item.name == icon.name如果名称相同就显示对应图标-->
                  <template slot="title">
                    <i
                      v-for="(icon, index) in iconIcon"
                      :key="index"
                      :class="item.name == icon.name ? icon.iconClassName : ''"
                    ></i>
                    <span>{{ item.name }}</span>  将父级名称显示出来在来触发子级
                  </template>
                  <!-- 循环出子级菜单数据 -->
                  <el-menu-item-group
                    v-for="(itemChild, indexChild) in item.childrenMenuLis"
                    :key="indexChild"
                  >
                    <el-menu-item :index="itemChild.url">{{
                      itemChild.name
                    }}</el-menu-item> 跳转的路由与子级名称
                  </el-menu-item-group>
                </el-submenu>
                <!-- 如果item.childrenMenuLis.length等于0,说明只有一级直接显示 -->
                <el-menu-item
                  v-if="item.childrenMenuLis.length === 0"
                  :index="item.url"
                  style="text-align: left;padding-left: 44px;"
                >
                  <!-- 循环出只有一级的图标 item.name == icon.name如果名称相同就显示对应图标-->
                  <span v-for="(icon1, index1) in iconIcon" :key="index1">
                    <i
                      :key="index1"
                      :class="
                        item.name == icon1.name ? icon1.iconClassName : ''
                      "
                    ></i> </span
                  >{{ item.name }}导航名</el-menu-item
                >
              </div>
            </el-menu>
          </el-col>
        </el-row>
      </el-aside>
    </el-container>

おすすめ

転載: www.cnblogs.com/home-/p/11976771.html