国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

vue遞歸組件實現(xiàn)elementUI多級菜單

3403771864 / 739人閱讀

  效果展示:

  一、子組件

  <template>
  <div class="myDiv">
  <!-- 這里的listAll用于接收父組件傳遞進(jìn)來的菜單列表 -->
  <template v-for="(item,i) in listAll">
  <!-- 有child就顯示child的下拉型菜單,有小箭頭 -->
  <el-submenu :index="item.index" :key="i" v-if="item.child.length!=0">
  <template slot="title">
  <img :src="item.img" alt="">
  <span>{{item.title}}</span>
  </template>
  <!-- 再次調(diào)用自身組件,傳入子集,進(jìn)行循環(huán)遞歸調(diào)用 -->
  <Menu :listAll="item.child"></Menu>
  </el-submenu>
  <!-- 沒有child,就顯示單個目錄,沒有小箭頭 -->
  <el-menu-item :index="item.index" v-else :key="i" @click="handleSelect(item.path,item.title,item.index)">
  <span slot="title"><img :src="item.img" alt="">{{item.title}}</span>
  </el-menu-item>
  </template>
  </div>
  </template>
  <script>
  export default {
  name: 'Menu',
  components: {},
  props: ['listAll'],
  data() {
  return {
  realList: this.listAll,
  }
  },
  methods: {
  //設(shè)置路由跳轉(zhuǎn)
  handleSelect(path, name, selfIndex) {
  this.$router.push(
  {
  path: "/" + path,
  query: {
  r_n: name,
  index: selfIndex
  }
  }
  )
  },
  },
  }
  </script>

  二、菜單數(shù)據(jù)準(zhǔn)備

  菜單中包含索引,圖片,名稱,跳轉(zhuǎn)路徑,這里我給出一部分?jǐn)?shù)據(jù),路由直接用數(shù)字了,你們最好定義為組件的英文名稱,這樣方便維護(hù)。

  export function menuJson() {
  var data = [{
  title: "元數(shù)據(jù)管理",
  img: "../../../static/img/manager.png",
  index: '1',
  child: [
  {
  "title": "元數(shù)據(jù)信息描述管理", "path": "main/02/005", "img": "../../../static/img/manager.png", "index": "1-2", "child": []
  },
  {
  "title": "元數(shù)據(jù)分組定義管理", "path": "main/02/007", "img": "../../../static/img/manager.png", "index": "1-3", "child": []
  },
  {
  "title": "元數(shù)據(jù)信息管理", "path": "main/02", "img": "../../../static/img/manager.png", "index": "1-1", "child": [
  { "title": "采集元數(shù)據(jù)", "path": "main/02/001", "index": "1-1-1", "img": "../../../static/img/blood.png", "child": [] },
  { "title": "元模型", "path": "main/02/004", "index": "1-2-1", "img": "../../../static/img/blood.png", "child": [] },
  ]
  },
  {
  "title": "元數(shù)據(jù)統(tǒng)計分析管理", "path": "main/01", "index": "1-4", "img": "../../../static/img/manager.png", "child": [
  { "title": "元數(shù)據(jù)變更管理", "path": "main/01/001", "index": "1-4-1", "img": "../../../static/img/blood.png", "child": [] },
  { "title": "數(shù)據(jù)地圖", "path": "main/01/002", "index": "1-4-2", "img": "../../../static/img/blood.png", "child": [] },
  {
  "title": "元數(shù)據(jù)分析", "path": "main/01/003", "index": "1-4-3", "img": "../../../static/img/yuanfenxi.png", "child": [
  { "title": "血緣分析", "path": "main/01/003/0001", "index": "1-4-3-1", "img": "../../../static/img/blood.png", "child": [] },
  { "title": "屬性差異分析", "path": "main/01/003/0003", "index": "1-4-3-2", "img": "../../../static/img/chayi.png", "child": [] },
  { "title": "影響分析", "path": "main/01/003/0004", "index": "1-4-3-3", "img": "../../../static/img/impact.png", "child": [] },
  ]
  },
  ]
  },
  ]
  },
  {
  title: "規(guī)則管理",
  img: "../../../static/img/manager.png",
  index: '2',
  child: [
  { "title": "數(shù)據(jù)接口定義管理", "index": "2-1", "path": "main/03/001", "img": "../../../static/img/source.png", "child": [] },
  { "title": "數(shù)據(jù)轉(zhuǎn)換規(guī)則管理", "index": "2-2", "path": "main/03/004", "img": "../../../static/img/modify.png", "child": [] },
  ]
  }
  ]
  return data
  }

  三、父組件調(diào)用

  <template>
  <div class="content menu">
  <div :style="{height:scrollHeight+'px'}">
  <el-col :span="24">
  <el-menu :default-active="activeIndex" :default-openeds="defalutIndex" background-color="#003289" text-color="#fff" active-text-color="#ffd04b">
  //調(diào)用子組件
  <Menu :listAll="listAll"></Menu>
  </el-menu>
  </el-col>
  </div>
  </div>
  </template>
  <script>
  import Menu from './menu'
  import { menuJson } from '../../assets/common/http' //調(diào)用js文件中的菜單數(shù)據(jù)
  export default {
  name: "Menus",
  mixins: [mixin],
  components: { Menu },
  data() {
  return {
  scrollHeight: 400,
  listAll: [],
  activeIndex: "-1",
  defalutIndex: []
  }
  },
  created() {
  //設(shè)置點擊菜單的索引,可以使得刷新后菜單仍保持原來查看的頁面
  this.activeIndex = String(this.$route.query.index);
  this.listAll = menuJson() //通過調(diào)用函數(shù)menuJson,獲取菜單
  },
  watch: {
  $route(to, from) {
  this.activeIndex = this.$route.query.index;
  }
  },
  }
  </script>
  <style scoped>
  @color: #003289;
  .menu {
  background: @color;
  > div {
  width: 100%;
  padding-top: 20px;
  // height: 100%;
  color: #ffffff;
  overflow-y: scroll;
  overflow-x: hidden;
  &::-webkit-scrollbar {
  display: none;
  }
  h1 {
  font-size: 20px;
  text-align: center;
  padding: 15px 0 25px 0;
  }
  }
  }
  .el-menu-demo {
  position: absolute;
  height: 58px !important;
  left: 25%;
  top: 0%;
  }
  </style>

  補(bǔ)充(面包屑的展示):

  有菜單,肯定需要面包屑的展示,例如

  這里我用的方法是,根據(jù)當(dāng)前頁面名稱,從樹形菜單數(shù)據(jù)中查找它的所有父級來實現(xiàn)面包屑導(dǎo)航欄的展示。

  html:

  <el-breadcrumb separator-class="el-icon-arrow-right">
  <el-breadcrumb-item v-for="(item,index) in listMenu" :key="index">{{item}}</el-breadcrumb-item>
  </el-breadcrumb>
  methods:
  methods: {
  //獲取樹形數(shù)據(jù)的某個元素的所有父節(jié)點
  getTreePath(tree, func, path) {
  if (!tree) return []
  for (const data of tree) {
  // 這里按照你的需求來存放最后返回的內(nèi)容吧
  //這里的title是我的菜單數(shù)據(jù)里面的名稱字段,你可以改成你的
  path.push(data.title)
  if (func(data)) return path
  if (data.child) {
  //獲取到子數(shù)據(jù),遞歸調(diào)用
  const findChildren = this.getTreePath(data.child, func, path)
  if (findChildren.length) return findChildren
  }
  path.pop()
  }
  return []
  },
  // 獲取面包屑
  getNavList() {
  var name = this.$route.query.r_n //先獲取當(dāng)前路由名稱
  var tree = menuJson() //獲取菜單數(shù)據(jù),menuJson這個函數(shù)上面用了,返回的事菜單數(shù)據(jù)
  this.path = [] //path用于存放所有父級,調(diào)用前需要清空
  //data => data.title === name查找數(shù)據(jù)中的title是否和當(dāng)前路由名稱相等
  this.getTreePath(tree, data => data.title === name, this.path)
  this.listMenu = this.path //找到之后賦值給面包屑路由數(shù)組
  console.log(this.listMenu)
  }
  }


文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/127672.html

相關(guān)文章

  • Vue2.0 + ElementUI 手寫權(quán)限管理系統(tǒng)后臺模板(一)——簡述

    摘要:簡介最近寫了一個基于權(quán)限管理系統(tǒng)的后臺模板,包含了正常項目開發(fā)所需的框架功能,開發(fā)者使用的時候只需要專注于項目的業(yè)務(wù)邏輯就好。同時接下來會讓你擁有一個自己完全掌控的框架。 簡介 最近寫了一個基于vue2.0+element-ui權(quán)限管理系統(tǒng)的后臺模板,包含了正常項目開發(fā)所需的框架功能,開發(fā)者使用的時候只需要專注于項目的業(yè)務(wù)邏輯就好。同時接下來會讓你擁有一個自己完全掌控的框架。 源碼地址...

    _ivan 評論0 收藏0
  • vue多級菜單(路由)導(dǎo)致緩存(keep-alive)失效

    摘要:造成這個問題的原因是多級路由組件嵌套。當(dāng)點擊菜單的時候,由于設(shè)置的不緩存,所以導(dǎo)致組件被銷毀這就是為什么會失效的根本原因。既然這樣的話,顯示的菜單保留多級的,實際的弄成一級,將顯示菜單和業(yè)務(wù)分離開。 一般的后臺管理系統(tǒng)功能都比較繁多,存在有多級菜單的需求,但是在這種項目里往往keep-alive的表現(xiàn)卻非常不穩(wěn)定,有時候某個頁面可以緩存,但是點幾下就發(fā)現(xiàn)緩存丟了;有時候不知道怎么回事又...

    big_cat 評論0 收藏0
  • Vue + Vue-router + Element-ui 搭建一個非常簡單的dashboard d

    摘要:但是有邊框,不好看啊再次美化使用使用圖標(biāo)庫安裝這里主要貼一下的改動,其他的代碼就不貼了看下效果圖標(biāo)什么的都有了。另外文件需要加上看看效果點擊菜單,路徑跳轉(zhuǎn),并且每次都是單獨去加載路由的文件。 做完這個demo后,我體會到,Vue組件化,webpack, Vue-router等,并不是很難學(xué)習(xí),你需要的只是拿起斧頭的勇氣在做demo的過程中,我遇到一個問題,就是vue-router懶加載...

    Near_Li 評論0 收藏0
  • 封裝框架的實踐

    摘要:最近在嘗試著封裝一個框架,礙于種種原因,先從簡單的入手吧。基于和封裝的框架,集成數(shù)據(jù)存儲字體圖標(biāo)庫拓展語言網(wǎng)絡(luò)請求等模塊,為了讓業(yè)務(wù)開發(fā)更專注于數(shù)據(jù)驅(qū)動。 最近在嘗試著封裝一個框架,礙于種種原因,先從簡單的入手吧。基于vue和elementUI封裝的框架,集成 數(shù)據(jù)存儲localforage、字體圖標(biāo)庫font-awesome、css拓展語言scss、網(wǎng)絡(luò)請求axios等模塊,為了讓業(yè)...

    Dogee 評論0 收藏0
  • 管理系統(tǒng)之權(quán)限的設(shè)計和實現(xiàn)

    摘要:基本設(shè)計和分析前端服務(wù)端主要功能打開思否頁面,根據(jù)頁面的功能點,設(shè)計出相關(guān)的數(shù)據(jù)表,和管理系統(tǒng)需要的相關(guān)頁面。 本文主要想對前端權(quán)限管理功能實現(xiàn)做一個分享,所以并不會對后臺管理的框架結(jié)構(gòu)做太詳細(xì)介紹,如果有朋友對其他有興趣可以留言。 基本設(shè)計和分析 前端 vue + elementui 服務(wù)端: node + mysql + nginx 主要功能 打開思否頁面,根據(jù)頁面的功能點,設(shè)...

    googollee 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<