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

vue實(shí)現(xiàn)多級(jí)菜單效果

 更新時(shí)間:2019年10月19日 14:38:31   作者:wangping146  
這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)多級(jí)菜單效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本次記錄基于iview3框架實(shí)現(xiàn)多級(jí)菜單+vue router實(shí)現(xiàn)頁(yè)面切換

方法一:

使用Tree 樹(shù)形控件,官方文檔

以官方demo為例,數(shù)據(jù)中添加URL屬性,用于路由跳轉(zhuǎn),正式項(xiàng)目中該tree控件的數(shù)據(jù)由后端給出,需要注意的是后端給出的URL跳轉(zhuǎn)地址最前一定要看清有沒(méi)有"/" ,如果沒(méi)有自己手動(dòng)加或后端改,沒(méi)有這個(gè)"/" 斜杠會(huì)導(dǎo)致路由跳轉(zhuǎn)失敗。

思路:根據(jù)官方文檔里面寫用on-select-change事件返回當(dāng)前已選中的節(jié)點(diǎn)數(shù)組、當(dāng)前項(xiàng),就利用返回的當(dāng)前項(xiàng)數(shù)據(jù)拿到URL,并使用router跳轉(zhuǎn)。

<template>
 <div class="layout">
 <Layout>
  <Header>
  <Menu mode="horizontal" theme="dark" active-name="1">
   <div class="layout-logo"></div>
   <div class="layout-nav">
   <MenuItem name="1">
    <Icon type="ios-navigate"></Icon>
    Item 1
   </MenuItem>
   <MenuItem name="2">
    <Icon type="ios-keypad"></Icon>
    Item 2
   </MenuItem>
   <MenuItem name="3">
    <Icon type="ios-analytics"></Icon>
    Item 3
   </MenuItem>
   <MenuItem name="4">
    <Icon type="ios-paper"></Icon>
    Item 4
   </MenuItem>
   </div>
  </Menu>
  </Header>
 </Layout>
 <Layout style="height: 100%;width: 100%;">
  <Sider hide-trigger breakpoint="md" width="200" :value=true>
   //方法一:使用Tree樹(shù)控件,綁定點(diǎn)選事件
   <Tree :data="data1" @on-select-change="selectChange"></Tree>
   //方法二:使用menu導(dǎo)航菜單和遞歸
   <!--<SubItem :model="item" :sindex="index" v-for="(item,index) in data1" :key="index"></SubItem>-->
  </Sider>
  <Layout >
  <router-view></router-view>
  </Layout>
 
 </Layout>
 
 </div>
 
</template>
<script>
 import SubItem from './SubItemm.vue'
 export default {
  components:{
   SubItem
  },
  data () {
   return {
    data1: [
     {
      title: 'parent 1',
      expand: true,
      url:null,
      children: [
       {
        title: 'parent 1-1',
        url:null,
        children: [
         {
          title: 'leaf 1-1-1',
          url:'/chpo/chpo/chpoShow'
         },
         {
          title: 'leaf 1-1-2',
          url:'/chpo/chpoCollection/chpocollectionshow'
         }
        ]
       },
       {
        title: 'parent 1-2',
        url:null,
        children: [
         {
          title: 'leaf 1-2-1',
          url:'/company/course/courseshow'
         },
         {
          title: 'leaf 1-2-1',
          url:'/system/sysgamutgame/gamutgameshow'
         }
        ]
       }
      ]
     }
    ]
   }
  },
  methods:{
   selectChange(node,curr){
    //node 當(dāng)前已選中的節(jié)點(diǎn)數(shù)組
    //curr 當(dāng)前項(xiàng),這里可是拿到當(dāng)前項(xiàng)的數(shù)據(jù),這樣可以拿到跳轉(zhuǎn)的URL
    if(curr.url)
    this.$router.push(curr.url)
   }
  }
 }
</script>

路由配置,這里子路由中的路徑要和后端給出的路由地址保持一致,才能正確跳轉(zhuǎn)

import Vue from 'vue'
import Router from 'vue-router'
import component1 from '@/components/component1'
import component2 from '@/components/component2'
import component3 from '@/components/component3'
import component4 from '@/components/component4'
import Index from '../view/Index'
 
Vue.use(Router)
 
export default new Router({
 routes: [
 {
  path: '/',
  name:'Index',
  component: Index,
  children:[
  {
   path: '/chpo/chpo/chpoShow',
   name:'component1',
   component: component1
  },
  {
   path: '/chpo/chpoCollection/chpocollectionshow',
   name:'component2',
   component: component2
  },
  {
   path: '/company/course/courseshow',
   name:'component3',
   component: component3
  },
  {
   path: '/system/sysgamutgame/gamutgameshow',
   name:'component4',
   component: component4
  },
  ]
 },
 
 ]
})

方法二:

使用Menu 導(dǎo)航菜單和遞歸來(lái)實(shí)現(xiàn),組件官方文檔

思路:①根據(jù)官方文檔 MenuItem有 to target 屬性,使用其一都能實(shí)現(xiàn)跳轉(zhuǎn),但跳轉(zhuǎn)結(jié)果可能不一樣,這里使用to屬性跳轉(zhuǎn)

②在子組件內(nèi)進(jìn)行是否為最終子項(xiàng),若不是則使用遞歸進(jìn)行再次循環(huán),直到最終子項(xiàng)

子組件

<template>
 <Submenu :name="model.title" style="width: 200px">
 <template slot="title" style="width: 200px">
  {{model.title}}
 </template>
 // v-if判斷是否為最終的子項(xiàng),如果是則進(jìn)行MenuItem渲染,否則進(jìn)行遞歸調(diào)用
 <MenuItem :name="item.title" v-for="item in model.children" :to="item.url" v-if="!item.children || item.children.length==0" :key="item.index" style="width: 200px">{{item.title}}</MenuItem>
  //遞歸調(diào)用
 <SubItem :model="item" v-if="item.children&&item.children.length!==0" v-for="(item,index) in model.children" :key="index"></SubItem> 
 
 </Submenu>
</template>
 
<script>
 export default {
  name: "SubItem", //至關(guān)重要的一步,一定要寫name,遞歸的時(shí)候使用
  props:['model'],
 }
</script>

在父組件中調(diào)用,使用v-for循環(huán)組件,傳入當(dāng)前item值即可,調(diào)用的代碼已經(jīng)在上面寫過(guò),不在贅述。

在MenuItem上綁定屬性:to 跳轉(zhuǎn)的router路徑,即可實(shí)現(xiàn)頁(yè)面切換。

最后截圖展示效果:

方法一:使用tree樹(shù)形組件效果

方法二:Menu組件和遞歸使用效果

至此,兩種方法寫完了,自己學(xué)習(xí)記錄,僅供參考思路。

更多教程點(diǎn)擊《Vue.js前端組件學(xué)習(xí)教程》,歡迎大家學(xué)習(xí)閱讀。

關(guān)于vue.js組件的教程,請(qǐng)大家點(diǎn)擊專題vue.js組件學(xué)習(xí)教程進(jìn)行學(xué)習(xí)。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • vue elementUI實(shí)現(xiàn)拖拽流程圖效果

    vue elementUI實(shí)現(xiàn)拖拽流程圖效果

    這篇文章主要為大家詳細(xì)介紹了如何通過(guò)vue elementUI實(shí)現(xiàn)拖拽流程圖效果,不引入插件,純手寫實(shí)現(xiàn),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-01-01
  • Vue 搭建Vuex環(huán)境詳解

    Vue 搭建Vuex環(huán)境詳解

    這篇文章主要為大家介紹了Vue搭建Vuex環(huán)境,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2021-11-11
  • element?upload?鉤子函數(shù)的坑及解決

    element?upload?鉤子函數(shù)的坑及解決

    這篇文章主要介紹了element?upload?鉤子函數(shù)的坑及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • Vue中 v-if/v-show/插值表達(dá)式導(dǎo)致閃現(xiàn)的原因及解決辦法

    Vue中 v-if/v-show/插值表達(dá)式導(dǎo)致閃現(xiàn)的原因及解決辦法

    在開(kāi)發(fā)過(guò)程中經(jīng)常會(huì)發(fā)現(xiàn)當(dāng)頁(yè)面明明不應(yīng)該出現(xiàn)的元素或內(nèi)容會(huì)閃現(xiàn)一下然后消失,這篇文章給大家分享Vue中 v-if/v-show/插值表達(dá)式導(dǎo)致閃現(xiàn)的原因及解決辦法,一起看看吧
    2018-10-10
  • Vue項(xiàng)目如何部署到Tomcat服務(wù)器上

    Vue項(xiàng)目如何部署到Tomcat服務(wù)器上

    這篇文章主要介紹了Vue項(xiàng)目如何部署到Tomcat服務(wù)器上,Vue中自帶webpack,可以通過(guò)一行命令將項(xiàng)目打包,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2024-03-03
  • Vue之Axios的異步請(qǐng)求問(wèn)題詳解

    Vue之Axios的異步請(qǐng)求問(wèn)題詳解

    總的來(lái)說(shuō)這并不是一道難題,那為什么要拿出這道題介紹?拿出這道題真正想要傳達(dá)的是解題的思路,以及不斷優(yōu)化探尋最優(yōu)解的過(guò)程。希望通過(guò)這道題能給你帶來(lái)一種解題優(yōu)化的思路,Axios是一個(gè)開(kāi)源的可以用在瀏覽器端和Node JS的異步通信框架,主要作用就是實(shí)現(xiàn)AJAX異步通信
    2023-02-02
  • vue 自定義指令directives及其常用鉤子函數(shù)說(shuō)明

    vue 自定義指令directives及其常用鉤子函數(shù)說(shuō)明

    這篇文章主要介紹了vue 自定義指令directives及其常用鉤子函數(shù)說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • elementui時(shí)間/日期選擇器選擇禁用當(dāng)前之前(之后)時(shí)間代碼實(shí)例

    elementui時(shí)間/日期選擇器選擇禁用當(dāng)前之前(之后)時(shí)間代碼實(shí)例

    當(dāng)我們?cè)谶M(jìn)行網(wǎng)頁(yè)開(kāi)發(fā)時(shí),通常需要用到一些日期組件來(lái)方便用戶選擇時(shí)間,其中element日期組件是一個(gè)非常好用的工具,這篇文章主要給大家介紹了關(guān)于elementui時(shí)間/日期選擇器選擇禁用當(dāng)前之前(之后)時(shí)間的相關(guān)資料,需要的朋友可以參考下
    2024-02-02
  • vue3中的Proxy一定要用Reflect的原因解析

    vue3中的Proxy一定要用Reflect的原因解析

    Reflect可以操作對(duì)象使用, proxy可以代理對(duì)象,但沒(méi)有找到為啥有時(shí)一定要在Proxy代理方法中使用Reflect,這篇文章主要介紹了vue3中的Proxy一定要用Reflect的原因解析,需要的朋友可以參考下
    2023-04-04
  • vue解決彈出蒙層滑動(dòng)穿透問(wèn)題的方法

    vue解決彈出蒙層滑動(dòng)穿透問(wèn)題的方法

    這篇文章主要介紹了vue解決彈出蒙層滑動(dòng)穿透問(wèn)題的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-09-09

最新評(píng)論

昭通市| 右玉县| 徐汇区| 青海省| 汕尾市| 香河县| 屏山县| 临汾市| 吴江市| 资中县| 安塞县| 巴塘县| 赫章县| 建水县| 安仁县| 饶阳县| 民县| 惠东县| 北流市| 古浪县| 龙陵县| 张家界市| 沙湾县| 越西县| 镇坪县| 宁南县| 临泉县| 瓦房店市| 崇礼县| 亚东县| 英德市| 陇川县| 武城县| 灵石县| 福鼎市| 松原市| 奉节县| 上饶县| 苍山县| 邛崃市| 丰原市|