Vue遞歸組件+Vuex開(kāi)發(fā)樹(shù)形組件Tree--遞歸組件

寫(xiě)在前面

首先辰狡,本篇文章所開(kāi)發(fā)的組件并非一個(gè)已經(jīng)開(kāi)源的上線組件,所以如果你急于需要一個(gè)插件來(lái)只做你的項(xiàng)目菊匿,那么并不能帶給你及時(shí)的幫助付呕。這個(gè)組件的開(kāi)發(fā)預(yù)計(jì)寫(xiě)兩篇文章,一遍寫(xiě)組件跌捆,一篇寫(xiě)組件邏輯徽职。這篇文章也是我自己開(kāi)發(fā)的從無(wú)到有的過(guò)程,所以它可以為你提供一些Tree組件開(kāi)發(fā)的思路佩厚,代碼寫(xiě)到一定程度姆钉,不能完全依賴插件了,有時(shí)間可以看看插件源碼或者動(dòng)手去開(kāi)發(fā)抄瓦,這樣真的能加深對(duì)技術(shù)的掌握程度潮瓶。

開(kāi)發(fā)過(guò)程

1.數(shù)據(jù)倉(cāng)庫(kù)-Vuex

2.組件的循環(huán)創(chuàng)建-遞歸組件

需求決定了我的技術(shù)選型,項(xiàng)目需求是一個(gè)中國(guó)各級(jí)政府列表的選擇闺鲸,后臺(tái)基于大數(shù)據(jù)去匯總各級(jí)政府網(wǎng)站的文章決策筋讨,然后交給前端去展示埃叭,左側(cè)顯示各級(jí)政府的Tree摸恍,右側(cè)顯示具體文章。因?yàn)檎當(dāng)?shù)據(jù)的不確定性赤屋,所以顯示政府的Tree也是動(dòng)態(tài)獲取的立镶,就比如北京市下級(jí)的海淀區(qū)政府不一定存在政策文章那么就不會(huì)在樹(shù)狀結(jié)構(gòu)里顯示對(duì)應(yīng)的名稱。

因此樹(shù)狀結(jié)構(gòu)的data是變化的而不是在初始化的時(shí)候就固定好的类早,采用Vue數(shù)據(jù)驅(qū)動(dòng)Dom的思想媚媒,data有多少層級(jí),Dom就有多少層級(jí)涩僻,data不定缭召,所以Dom也無(wú)法提前定義好層級(jí)栈顷,因此使用了Vue的遞歸組件,組件遞歸自身實(shí)現(xiàn)無(wú)限制層級(jí)的渲染嵌巷。需求中每一個(gè)節(jié)點(diǎn)的Tree都具有增刪改的功能萄凤,因?yàn)閐ata是單例的,全局維護(hù)著一個(gè)data數(shù)據(jù)源頭搪哪,增刪改也就是操作data第n個(gè)子節(jié)點(diǎn)的某個(gè)子元素靡努,因此采用了Vuex作為一個(gè)data存放的倉(cāng)庫(kù)。

data的數(shù)據(jù)結(jié)構(gòu):

每一個(gè)節(jié)點(diǎn)包含id晓折,label惑朦,nodes三個(gè)屬性,nodes往下延伸子節(jié)點(diǎn)漓概,一共有多少級(jí)不確定根據(jù)后臺(tái)獲取得到漾月。


遞歸組件

遞歸組件的示例如下:TreeMenu.vue

TreeMenu.vue聲明組件TreeMenu,并向外暴露,在組件內(nèi)部調(diào)用自身<tree-menu>,也就是一個(gè)遞歸的思想垛耳,綁定的dataNodes有多少層級(jí)栅屏,那就會(huì)遞歸多少層,因?yàn)槊恳粚佣加衯-for都會(huì)循環(huán)子節(jié)點(diǎn)堂鲜。綁定具體數(shù)據(jù)的時(shí)候再具體分析栈雳。

1.Tree.vue、TreeMenu.vue

? ? 創(chuàng)建Tree.vue文件缔莲,作為組件樹(shù)的入口文件哥纫,類似于App.vue,數(shù)據(jù)data會(huì)在Tree.vue進(jìn)行一些初始化的操作痴奏。

? ? ?在Tree.vue入口組件里引入子組件TreeMenu.vue蛀骇,并且向子組件傳遞數(shù)據(jù)label和nodes,這里data先預(yù)定義一個(gè)簡(jiǎn)單的對(duì)象读拆,后面會(huì)動(dòng)態(tài)獲取擅憔。

????TreeMenu.vue作為樹(shù)形菜單組件,負(fù)責(zé)遞歸和數(shù)據(jù)渲染檐晕,它會(huì)接受來(lái)自入口組件傳遞來(lái)的label和nodes數(shù)據(jù)暑诸,進(jìn)行渲染,并且繼續(xù)遞歸傳遞nodes和label辟灰。

在從父組件接收nodes和label后个榕,先循環(huán)渲染n個(gè)tree-menu組件,然后每一個(gè)tree-menu又會(huì)遞歸自身芥喇,所以數(shù)據(jù)就這樣一層層向下傳遞 nodes=>nodes.node=>nodes.node.node,此時(shí)已經(jīng)完成了數(shù)據(jù)與Dom的綁定西采,可以修改一下Tree.vue中的tree數(shù)據(jù)源,看一下組件是否動(dòng)態(tài)改變了〖炭兀現(xiàn)在渲染如下圖:

數(shù)據(jù)正確渲染械馆,現(xiàn)在需要加一些樣式和點(diǎn)擊事件(展開(kāi)與收縮)胖眷,就不做詳細(xì)介紹了,代碼如下: (向下傳遞depth參數(shù)來(lái)獲取層級(jí)索引)

修改后會(huì)展開(kāi)收縮與縮進(jìn)霹崎,一些箭頭旋轉(zhuǎn)等樣式問(wèn)題就不詳細(xì)寫(xiě)了瘦材。

這一篇主要寫(xiě)遞歸組件的簡(jiǎn)單實(shí)現(xiàn),下一篇寫(xiě)數(shù)據(jù)獲取方面仿畸,其實(shí)現(xiàn)在組件已經(jīng)寫(xiě)好了食棕,我們現(xiàn)在只需要關(guān)注數(shù)據(jù)層,數(shù)據(jù)變化Dom會(huì)自動(dòng)響應(yīng)變化的错沽。

鏈接Vue遞歸組件+Vuex開(kāi)發(fā)樹(shù)形組件Tree--數(shù)據(jù)模塊

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末簿晓,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子千埃,更是在濱河造成了極大的恐慌憔儿,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,635評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件放可,死亡現(xiàn)場(chǎng)離奇詭異谒臼,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)耀里,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門蜈缤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人冯挎,你說(shuō)我怎么就攤上這事底哥。” “怎么了房官?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,083評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵趾徽,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我翰守,道長(zhǎng)孵奶,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,640評(píng)論 1 296
  • 正文 為了忘掉前任蜡峰,我火速辦了婚禮了袁,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘事示。我一直安慰自己早像,他們只是感情好僻肖,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布肖爵。 她就那樣靜靜地躺著,像睡著了一般臀脏。 火紅的嫁衣襯著肌膚如雪劝堪。 梳的紋絲不亂的頭發(fā)上冀自,一...
    開(kāi)封第一講書(shū)人閱讀 52,262評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音秒啦,去河邊找鬼熬粗。 笑死,一個(gè)胖子當(dāng)著我的面吹牛余境,可吹牛的內(nèi)容都是我干的驻呐。 我是一名探鬼主播,決...
    沈念sama閱讀 40,833評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼芳来,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼含末!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起即舌,我...
    開(kāi)封第一講書(shū)人閱讀 39,736評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤佣盒,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后顽聂,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體肥惭,經(jīng)...
    沈念sama閱讀 46,280評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評(píng)論 3 340
  • 正文 我和宋清朗相戀三年紊搪,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蜜葱。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,503評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡耀石,死狀恐怖笼沥,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情娶牌,我是刑警寧澤奔浅,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站诗良,受9級(jí)特大地震影響汹桦,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜鉴裹,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評(píng)論 3 333
  • 文/蒙蒙 一舞骆、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧径荔,春花似錦督禽、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,340評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至鹦马,卻和暖如春胧谈,著一層夾襖步出監(jiān)牢的瞬間忆肾,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,460評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工菱肖, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留客冈,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,909評(píng)論 3 376
  • 正文 我出身青樓稳强,卻偏偏與公主長(zhǎng)得像场仲,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子退疫,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容