1. 程式人生 > 程式設計 >不依任何賴第三方,單純用vue實現Tree 樹形控制元件的案例

不依任何賴第三方,單純用vue實現Tree 樹形控制元件的案例

這幾天接到一個需求,裡面有需要做一個屬性元件,找的第三方的,但是不能完全滿足我的需求,有這時間,我就自己做個小輪子吧。

先看效果圖(紅點之前用的字型圖示,是個對號,這裡為了方便,用圓圈代替了選中狀態,所以不是太好看,需要的自行修改就好)

不依任何賴第三方,單純用vue實現Tree 樹形控制元件的案例

我直接用的vue-cli搭建的專案,程式碼目錄如下:

不依任何賴第三方,單純用vue實現Tree 樹形控制元件的案例

使用方式如下:

不依任何賴第三方,單純用vue實現Tree 樹形控制元件的案例

treeData的格式如下:

treeData: [
    {open: false,name: '1',level: 0,checked: true},{
     open: false,// opend 是否展開子集
     name: '2',//level代表第幾層
     checked: false,// checked 代表是否選中狀態
     children: [
      {
       open: false,name: '3',level: 1,checked: false,children: [
        {open: false,name: '4',level: 2,checked: false},{
         open: false,name: '5',checked: false
        }
       ]
      }
     ]
    }
   ],

這個元件設計到幾個關鍵點如下:

1. 深度watch

由於資料是個深層的物件,所以單純的watch,檢測不到資料的變化,所以使用deep,程式碼如下:

watch: {
  // 深度監聽 treeDate的資料變化 用 deep
  treeData: {
   handler: function (newVal,oldVal) {
    this.calculateSelectFormResult()
   },deep: true
  }
 }

2.遞迴

資料的結果是用遞迴遍歷出來的,

calculateSelectFormResult: function () {
   var arr = []
   function f (obj) {
    for (var i in obj) {
     if (obj[i].checked) {
      // console.log(2)
      arr.push(obj[i].name)
     }
     if (obj[i].children) {
      if (obj[i].children.length !== 0) {
       f(obj[i].children)
      }
     }
    }
   }
   f(this.treeData)
   this.selectFormResult = arr
   console.log(this.selectFormResult)
  }

3.模擬slideDown slideUp動畫效果

不依任何賴第三方,單純用vue實現Tree 樹形控制元件的案例

專案完整程式碼地址: https://github.com/YalongYan/tree

補充知識:vue實現elment 可編輯樹形控制元件

功能實現程度:

elment樹形控制元件,已具備新增、刪除功能,此專案,新增編輯功能,新增時可對節點命名,也可直接給已新增的節點修改名字

先看效果:

不依任何賴第三方,單純用vue實現Tree 樹形控制元件的案例

控制元件有所改動,如加輸入框,輸入關鍵字過濾,節點圖示變換。。。。參看elment Tree樹形控制元件文件即可

專案下載

專案地址:https://github.com/midnightvisitor/vue-el-tree.git

如需要,請自行下載

以上這篇不依任何賴第三方,單純用vue實現Tree 樹形控制元件的案例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。