欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

本文實(shí)例為大家分享了vue.js實(shí)現(xiàn)二級(jí)菜單效果的具體代碼,供大家參考,具體內(nèi)容如下

主要是對(duì)二級(jí)菜單和當(dāng)前點(diǎn)擊的處理:

點(diǎn)擊導(dǎo)航時(shí),如果有二級(jí)菜單,就切換二級(jí)菜單顯示狀態(tài)(顯示或者關(guān)閉),如果沒(méi)有二級(jí)菜單,就變色,表示頁(yè)面處于當(dāng)前位置,并且導(dǎo)航中最多只能有一個(gè)菜單變色。

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>這是一個(gè)v-for的導(dǎo)航條</title>
 <link  rel="stylesheet">
 <script src="https://cdn.jsdelivr.net/npm/vue@2.5.17/dist/vue.min.js"></script>
 <link rel="stylesheet" href="nav.css" >
</head>
<body>
<div id="pages">
 <ul id="side-menu">
 <li class="menu-unit" v-for="menu in menus">
  <a id="menu-url" v-bind:href="menu.url" 
   v-bind:class="{ 'menu-active': menu.active && !menu.secondMenus}"
   v-on:click="showToggle(menu)"
  >
  <i v-bind:class="menu.icon"></i>
  <span>{{ menu.text }}</span>
  <i v-if="menu.downIcon" v-bind:class="menu.downIcon"></i>
  </a>
  <ul id="side-second-menu" v-if="menu.secondMenus && menu.active">
  <li v-for="secMenu in menu.secondMenus" v-on:click="showToggle(menu, secMenu)">
   <a v-bind:href="secMenu.url" rel="external nofollow" 
    v-bind:class="{ 'menu-active': secMenu.active }">
   <span>{{ secMenu.text }}</span>
   </a>
  </li>
  </ul>
 </li>
 </ul>
</div>

<script>
 var vm = new Vue({
 el: '#side-menu',
 data: {
  menus: [
  {
   text: '首頁(yè)',
   icon: 'glyphicon glyphicon-apple',
   active: false
  },
  {
   text: '文檔',
   // url: 'https://www.baidu.com/',
   icon: 'glyphicon glyphicon-book',
   active: false
  },
  {
   text: '引導(dǎo)頁(yè)',
   // url: 'https://www.baidu.com/',
   icon: 'glyphicon glyphicon-send',
   active: false
  },
  {
   text: '權(quán)限測(cè)試頁(yè)',
   icon: 'glyphicon glyphicon-lock',
   downIcon: 'glyphicon glyphicon-menu-down',
   active: false,
   secondMenus: [
   {text: '頁(yè)面權(quán)限', url: '#', active: false},
   {text: '權(quán)限指令', url: '#', active: false},
   ]
  },
  {
   text: '圖標(biāo)',
   icon: 'glyphicon glyphicon-pawn',
   active: false,
   // url: 'https://www.baidu.com/'
  },
  ]
 },
 methods: {
  showToggle: function (menu, secMenu) {
  // 如果傳入了二級(jí)菜單
  if (secMenu) {
   secMenu.active = true;
   // 更新menus數(shù)據(jù)
   this.refreshMenuTree(this.menus, menu, secMenu);
  } else {
   if (menu.secondMenus) {
   menu.active = !menu.active;
   } else {
   menu.active = true;
   // 更新menus數(shù)據(jù)
   this.refreshMenuTree(this.menus, menu, secMenu);
   }
  }
  },

  /**
  * 解釋:對(duì)于菜單欄active置為true的邏輯,可以簡(jiǎn)化為,我點(diǎn)擊誰(shuí)誰(shuí)就active,其他的菜單項(xiàng)active都變?yōu)?
  * false。但特殊情況為二級(jí)菜單,二級(jí)菜單點(diǎn)擊后自己的active變?yōu)閠rue,但父菜單項(xiàng)的active不能變false。
  * 所以問(wèn)題簡(jiǎn)化為:
  * 1. 點(diǎn)擊的菜單項(xiàng)的active變?yōu)閠rue
  * 2. 遍歷整個(gè)菜單的所有數(shù)據(jù)項(xiàng),不等于我點(diǎn)擊的這個(gè)菜單項(xiàng)的active都變?yōu)閒alse
  * (但二級(jí)菜單要考慮其父菜單項(xiàng)不能變false,即除了我點(diǎn)擊的這個(gè)和我的父菜單項(xiàng)外都變false)
  *
  * 關(guān)鍵問(wèn)題即:用樹(shù)的遍歷解決菜單所有數(shù)據(jù)項(xiàng)的遍歷和active取反,即對(duì)于被遍歷的每個(gè)菜單項(xiàng)來(lái)說(shuō),
  * 只要不等于我傳入的一級(jí)菜單和二級(jí)菜單,active就變成false
  *
  * 整體邏輯即:menus中的數(shù)據(jù)項(xiàng),進(jìn)行遍歷,如果不等于傳入的menu或者secMenu則直接置為false
  * @param menus 包含menu數(shù)據(jù)項(xiàng)的數(shù)組,如一級(jí)菜單數(shù)組,二級(jí)菜單數(shù)組
  * @param menu 應(yīng)該激活的一級(jí)菜單項(xiàng)
  * @param secMenu 應(yīng)該激活的二級(jí)菜單項(xiàng)
  */
  refreshMenuTree(menus, menu, secMenu) {
  // 開(kāi)始遍歷
  menus.forEach(function (item) {
   // 如果菜單項(xiàng)不等于傳入的一級(jí)菜單項(xiàng)或二級(jí)菜單項(xiàng),則active置為false
   if (!(item === menu || item === secMenu || (item.secondMenus && item.active))) {
   item.active = false;
   }

   // 如果菜單項(xiàng)包含二級(jí)菜單列表,則遍歷此列表
   if (item.secondMenus) {
   this.refreshMenuTree(item.secondMenus, menu, secMenu);
   }
   // 使用.bind(this)給函數(shù)的this綁定為外層的作用域,要不然this.refreshMenuTree方法取不到
  }.bind(this));
  },

 }
 })
</script>

<!-- jQuery (Bootstrap 的所有 JavaScript 插件都依賴 jQuery,所以必須放在前邊) -->
<script src="https://cdn.jsdelivr.net/npm/jquery@1.12.4/dist/jquery.min.js"></script>
<!-- 加載 Bootstrap 的所有 JavaScript 插件。你也可以根據(jù)需要只加載單個(gè)插件。 -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/js/bootstrap.min.js"></script>

</body>
</html>

更多教程點(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.js 表單控件操作小結(jié)

    Vue.js 表單控件操作小結(jié)

    這篇文章給大家介紹了Vue.js 表單控件操作的相關(guān)知識(shí),本文通過(guò)實(shí)例演示了input和textarea元素中使用v-model的方法,本文給大家介紹的非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧
    2018-03-03
  • vue3.2?reactive函數(shù)問(wèn)題小結(jié)

    vue3.2?reactive函數(shù)問(wèn)題小結(jié)

    reactive用來(lái)包裝一個(gè)對(duì)象,使其每個(gè)對(duì)象屬性都具有響應(yīng)性(也就是深層次響應(yīng)式),這篇文章主要介紹了vue3.2?reactive函數(shù)注意點(diǎn)及問(wèn)題小結(jié),需要的朋友可以參考下
    2022-12-12
  • Vue項(xiàng)目新一代狀態(tài)管理工具Pinia的使用教程

    Vue項(xiàng)目新一代狀態(tài)管理工具Pinia的使用教程

    pinia是一個(gè)輕量級(jí)的狀態(tài)管理庫(kù),屬于 vue3 生態(tài)圈新的成員之一,下面這篇文章主要給大家介紹了關(guān)于Vue項(xiàng)目新一代狀態(tài)管理工具Pinia的使用教程,需要的朋友可以參考下
    2022-11-11
  • 教你一招解決vue頁(yè)面自適應(yīng)布局

    教你一招解決vue頁(yè)面自適應(yīng)布局

    在前端開(kāi)發(fā)的時(shí)候經(jīng)常會(huì)遇到這樣的困惑,設(shè)計(jì)師給你的設(shè)計(jì)稿的尺寸和頁(yè)面的尺寸不一致,導(dǎo)致了頁(yè)面無(wú)法正常顯示,下面這篇文章主要給大家介紹了關(guān)于一招解決vue頁(yè)面自適應(yīng)布局的相關(guān)資料,需要的朋友可以參考下
    2022-07-07
  • vue實(shí)現(xiàn)在頁(yè)面上添加水印的示例代碼

    vue實(shí)現(xiàn)在頁(yè)面上添加水印的示例代碼

    這篇文章主要給大家介紹一下vue實(shí)現(xiàn)在頁(yè)面上添加水印的實(shí)例,文中有詳細(xì)的代碼示例供大家參考,具有一定的參考價(jià)值,感興趣的小伙伴跟著小編一起來(lái)看看吧
    2023-12-12
  • Vue cli 引入第三方JS和CSS的常用方法分享

    Vue cli 引入第三方JS和CSS的常用方法分享

    下面小編就為大家分享一篇Vue cli 引入第三方JS和CSS的常用方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-01-01
  • npm run serve運(yùn)行vue項(xiàng)目時(shí)報(bào)錯(cuò):Error: error:0308010C:digital envelope routines::unsupported的解決方法

    npm run serve運(yùn)行vue項(xiàng)目時(shí)報(bào)錯(cuò):Error: error:0308010C

    這篇文章主要介紹了npm run serve運(yùn)行vue項(xiàng)目時(shí),出現(xiàn)報(bào)錯(cuò):Error: error:0308010C:digital envelope routines::unsupported的解決方法,文中有詳細(xì)的解決方法,需要的朋友可以參考下
    2024-04-04
  • 原生JS?Intersection?Observer?API實(shí)現(xiàn)懶加載

    原生JS?Intersection?Observer?API實(shí)現(xiàn)懶加載

    這篇文章主要為大家介紹了原生JS?Intersection?Observer?API實(shí)現(xiàn)懶加載示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • vue+ElementUI實(shí)現(xiàn)訂單頁(yè)動(dòng)態(tài)添加產(chǎn)品數(shù)據(jù)效果實(shí)例代碼

    vue+ElementUI實(shí)現(xiàn)訂單頁(yè)動(dòng)態(tài)添加產(chǎn)品數(shù)據(jù)效果實(shí)例代碼

    本篇文章主要介紹了vue+ElementUI實(shí)現(xiàn)訂單頁(yè)動(dòng)態(tài)添加產(chǎn)品效果實(shí)例代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • Vue.js上下滾動(dòng)加載組件的實(shí)例代碼

    Vue.js上下滾動(dòng)加載組件的實(shí)例代碼

    本篇文章主要介紹了Vue.js上下滾動(dòng)加載組件的實(shí)例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-07-07

最新評(píng)論