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

Vue2遞歸組件實現(xiàn)樹形菜單

 更新時間:2021年08月20日 11:03:31   作者:吃個石頭  
這篇文章主要為大家詳細介紹了Vue2遞歸組件實現(xiàn)樹形菜單的相關(guān)代碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

今天看了老長時間遞歸組件,官方給的教程太簡便了,根本看不出到底怎么用。于是自己查網(wǎng)摸索了一下,這兒只把核心思想寫出來。

效果如下圖,點擊后打開二級菜單,再點擊后打開三級。

//js 
//引子
//思想:當v-if=‘false'時,循環(huán)時進行的。所以一開始就設(shè)置為false。
 ggg:{
  name:'gs',
  template:`
   <div>
     <p @click.stop='show=!show'>我是p標簽</p> 

     //這兒show必須要初始值為false,不然就是堆棧溢出,死循環(huán)。
      <gs v-if='show' ></gs>            

    //這個是循環(huán)組件。命名后當函數(shù)使。
   </div>         
}

由于每次遞歸組件,就相當于實例化了一次組件。所有寫在組件data中的值都是該組件專屬的。

樹狀結(jié)構(gòu):

我們在父組件給出一個數(shù)據(jù),子組件調(diào)用這個數(shù)據(jù),然后子組件的子組件調(diào)用它父組件的數(shù)據(jù),如此循環(huán)下去。只要數(shù)據(jù)結(jié)構(gòu)相同,他們調(diào)用的方法相同,就行的通。當最后沒有子組件的時候,
它不會報錯,這個應(yīng)該是被vue優(yōu)化了。

思想:遞歸調(diào)用某個組件,而這個組件的作用就是解析出此層的數(shù)據(jù)。因此數(shù)據(jù)的格式就有技巧:

msg:[{//對此數(shù)組遍歷。                             

 js
  text:1, //第一層數(shù)據(jù) ,要顯示1,就要對頂層text遍歷,xxx.text就得到1。
    //點擊‘1'彈出1-1就需要將父組件的xxx.next傳給子組件。
  next:[{
   text:'1-1',//第二層數(shù)據(jù)
   next:[{
   text:'1-1-1',//第三層數(shù)據(jù)
   next:[{
    text:'1-1-1-1',
   }]
   }]
  }]
 },{
  text:2, //第一層數(shù)據(jù)
 },{
 text:3, //第一層數(shù)據(jù)
 }]
//html
  <div>
   <ggg :msg='msg'></ggg> //這兒寫在父組件模板中。
  </div>

//js
ggg:{
  name:'gs',// 這兒必須起個名字,這個名字其實就是構(gòu)造函數(shù)的名字。沒有名字無法遞歸組件。
  template:`// 構(gòu)造函數(shù)的return值,模板。
  <ul >  
      <li v-for='a in text'> 
   {{a.text}}//第一次1、2、3;第二次 1-1 ,第三次1-1-1,第四次1-1-1-1 
   <gs :msg='a.next'></gs> // 這兒遞歸用組件(構(gòu)造函數(shù)),代碼運行到這兒時會返回去調(diào)用。這兒有個很重要的操作,將這一層的a.text數(shù)據(jù)傳到下一層去,并且改為text
  </li>
  </ul>`,
  props:['msg'],//這個是接收父組件過的值
}

到此基本概念已經(jīng)齊全了。

點擊1 出現(xiàn)1-1:

<li v-for='a in msg' @click.stop.self='show=!show'>// 在li標簽添加一個點擊事件,改變show的值。
  {{a.text}}
  <gs :msg='a.next' v-if='show' ></gs>         

  //官網(wǎng)上說了,這兒是show為true才會遞歸。就是解析下一次數(shù)據(jù)。
</li> 

點擊1想出現(xiàn)1-2:修改data的值,從頂層數(shù)據(jù)出現(xiàn)1 2 3可以推斷出來。

全代碼:

<template >
 <div>
 <ggg :msg='msg'></ggg> //組件使用 父組件傳msg 子組件接收(:msg)
 </div>
</template>

<script>


export default { //這兒用的腳手架,若是普通文件,這兒就是new Vue({})
 data(){
 return {
 msg:[{
  text:1,
  next:[{
   text:'1-1',
   next:[{
   text:'1-1-1',
   next:[{
    text:'1-1-1-1',
   }]
   }]
  },{
   text:'1-2' //1-2寫在這兒,第二層數(shù)據(jù)數(shù)組中的a[1].text就是‘1-2'
  }]
  },{
  text:2,
  
  },{
  text:3,
  
  }]
 }
 },
 components:{
 ggg:{
  name:'gs',
  template:`
  <ul >
  <li v-for='a in msg' @click.stop.self='show=!show'>
   {{a.text}}
   <gs :msg='a.next' v-if='show' ></gs>
  </li>
  </ul>`,
  props:['msg'],
  data(){
  return {
   show:false
  }
  }
 }
 }
}
</script>

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

相關(guān)文章

  • vue單頁面應(yīng)用部署配置詳解

    vue單頁面應(yīng)用部署配置詳解

    本文主要介紹了vue單頁面應(yīng)用部署配置詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2023-04-04
  • vue package.json文件的使用及說明

    vue package.json文件的使用及說明

    `package.json`是Node.js和npm項目的核心配置文件,定義了項目的元數(shù)據(jù)和依賴項,在Vue項目中,它管理依賴、提供腳本命令、存儲項目信息,并通過語義化版本控制確保項目穩(wěn)定
    2025-01-01
  • Vue3自動引入組件與組件庫的方法實例

    Vue3自動引入組件與組件庫的方法實例

    關(guān)于vue?組件還是非常好用的,真正掌握預(yù)計需要一段時間,下面這篇文章主要給大家介紹了關(guān)于Vue3自動引入組件與組件庫的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-10-10
  • 利用Vue3和element-plus實現(xiàn)圖片上傳組件

    利用Vue3和element-plus實現(xiàn)圖片上傳組件

    element-plus提供了uploader組件,但是不好定制化。所以本文將利用Vue3和element-plus實現(xiàn)一個圖片上傳的組件,感興趣的可以了解一下
    2022-03-03
  • 一文教會你vue中使用async和await

    一文教會你vue中使用async和await

    async和await作為異步函數(shù),語法很簡單,就是在函數(shù)前面加上async 關(guān)鍵字,來表示它是異步的,下面這篇文章主要給大家介紹了如何通過一文教會你vue中使用async和await的相關(guān)資料,需要的朋友可以參考下
    2022-10-10
  • vue實現(xiàn)簡單分頁功能

    vue實現(xiàn)簡單分頁功能

    這篇文章主要為大家詳細介紹了vue實現(xiàn)簡單分頁功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • 詳解vue中的computed的this指向問題

    詳解vue中的computed的this指向問題

    這篇文章主要介紹了詳解vue中的computed的this指向問題,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-12-12
  • vue中$set的使用(結(jié)合在實際應(yīng)用中遇到的坑)

    vue中$set的使用(結(jié)合在實際應(yīng)用中遇到的坑)

    這篇文章主要介紹了vue中$set的使用(結(jié)合在實際應(yīng)用中遇到的坑),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • Vue中computed屬性和watch,methods的區(qū)別

    Vue中computed屬性和watch,methods的區(qū)別

    本文主要介紹了Vue中computed屬性和watch,methods的區(qū)別,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2023-05-05
  • TypeError:res.forEach?is?not?a?function報錯解決辦法

    TypeError:res.forEach?is?not?a?function報錯解決辦法

    這篇文章主要給大家介紹了關(guān)于TypeError:res.forEach?is?not?a?function報錯的解決辦法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友可以參考下
    2023-07-07

最新評論

北安市| 轮台县| 安平县| 黄龙县| 孟连| 景德镇市| 高淳县| 随州市| 综艺| 仪征市| 五常市| 新晃| 潜江市| 同江市| 丰县| 宁南县| 乾安县| 朔州市| 聂拉木县| 宜都市| 鲁山县| 太保市| 阿坝县| 安岳县| 威宁| 淅川县| 清河县| 酉阳| 梨树县| 湟中县| 平阴县| 古丈县| 津南区| 通化市| 会同县| 鸡西市| 张家川| 鞍山市| 平顺县| 上栗县| 原平市|