您好,登錄后才能下訂單哦!
本文小編為大家詳細(xì)介紹“怎么使用Vue遞歸組件實(shí)現(xiàn)樹形菜單”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“怎么使用Vue遞歸組件實(shí)現(xiàn)樹形菜單”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學(xué)習(xí)新知識(shí)吧。
效果如下圖,點(diǎn)擊后打開二級(jí)菜單,再點(diǎn)擊后打開三級(jí)。
//js //引子 //思想:當(dāng)v-if=‘false'時(shí),循環(huán)時(shí)進(jìn)行的。所以一開始就設(shè)置為false。 ggg:{ name:'gs', template:` <div> <p @click.stop='show=!show'>我是p標(biāo)簽</p> //這兒show必須要初始值為false,不然就是堆棧溢出,死循環(huán)。 <gs v-if='show' ></gs> //這個(gè)是循環(huán)組件。命名后當(dāng)函數(shù)使。 </div> }
由于每次遞歸組件,就相當(dāng)于實(shí)例化了一次組件。所有寫在組件data中的值都是該組件專屬的。
樹狀結(jié)構(gòu):
我們?cè)诟附M件給出一個(gè)數(shù)據(jù),子組件調(diào)用這個(gè)數(shù)據(jù),然后子組件的子組件調(diào)用它父組件的數(shù)據(jù),如此循環(huán)下去。只要數(shù)據(jù)結(jié)構(gòu)相同,他們調(diào)用的方法相同,就行的通。當(dāng)最后沒有子組件的時(shí)候,
它不會(huì)報(bào)錯(cuò),這個(gè)應(yīng)該是被vue優(yōu)化了。
思想:遞歸調(diào)用某個(gè)組件,而這個(gè)組件的作用就是解析出此層的數(shù)據(jù)。因此數(shù)據(jù)的格式就有技巧:
msg:[{//對(duì)此數(shù)組遍歷。 js text:1, //第一層數(shù)據(jù) ,要顯示1,就要對(duì)頂層text遍歷,xxx.text就得到1。 //點(diǎn)擊‘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è)名字,這個(gè)名字其實(shí)就是構(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ù)),代碼運(yùn)行到這兒時(shí)會(huì)返回去調(diào)用。這兒有個(gè)很重要的操作,將這一層的a.text數(shù)據(jù)傳到下一層去,并且改為text </li> </ul>`, props:['msg'],//這個(gè)是接收父組件過的值 }
到此基本概念已經(jīng)齊全了。
點(diǎn)擊1 出現(xiàn)1-1:
<li v-for='a in msg' @click.stop.self='show=!show'>// 在li標(biāo)簽添加一個(gè)點(diǎn)擊事件,改變show的值。 {{a.text}} <gs :msg='a.next' v-if='show' ></gs> //官網(wǎng)上說了,這兒是show為true才會(huì)遞歸。就是解析下一次數(shù)據(jù)。 </li>
點(diǎn)擊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>
Vue是一套用于構(gòu)建用戶界面的漸進(jìn)式JavaScript框架,Vue與其它大型框架的區(qū)別是,使用Vue可以自底向上逐層應(yīng)用,其核心庫只關(guān)注視圖層,方便與第三方庫和項(xiàng)目整合,且使用Vue可以采用單文件組件和Vue生態(tài)系統(tǒng)支持的庫開發(fā)復(fù)雜的單頁應(yīng)用。
讀到這里,這篇“怎么使用Vue遞歸組件實(shí)現(xiàn)樹形菜單”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識(shí)點(diǎn)還需要大家自己動(dòng)手實(shí)踐使用過才能領(lǐng)會(huì),如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。