layui樹形結構

romanstatic發表於2017-12-13
       最近接觸Layui框架,感覺還不錯,就總結一下在使用layui的樹形結構的使用。
       在官網上檢視時發現關於layui的使用都是靜態新增的程式碼,如果我想動態新增樹形節點時遇到了很大的問題,官網的靜態示例程式碼如下:
layui.use(['tree', 'layer'], function(){
  var layer = layui.layer
  ,$ = layui.jquery; 
  
  layui.tree({
    elem: '#demo1' //指定元素
    ,target: '_blank' //是否新選項卡開啟(比如節點返回href才有效)
    ,click: function(item){ //點選節點回撥
      layer.msg('當前節名稱:'+ item.name + '<br>全部引數:'+ JSON.stringify(item));
      console.log(item);
    }
    ,nodes: [ //節點
      {
        name: '常用資料夾'
        ,id: 1
        ,alias: 'changyong'
        ,children: [
          {
            name: '所有未讀(設定跳轉)'
            ,id: 11
            ,href: 'http://www.layui.com/'
            ,alias: 'weidu'
          }, {
            name: '置頂郵件'
            ,id: 12
          }, {
            name: '標籤郵件'
            ,id: 13
          }
        ]
      }, {
        name: '我的郵箱'
        ,id: 2
        ,spread: true
        ,children: [
          {
            name: 'QQ郵箱'
            ,id: 21
            ,spread: true
            ,children: [
              {
                name: '收件箱'
                ,id: 211
                ,children: [
                  {
                    name: '所有未讀'
                    ,id: 2111
                  }, {
                    name: '置頂郵件'
                    ,id: 2112
                  }, {
                    name: '標籤郵件'
                    ,id: 2113
                  }
                ]
              }, {
                name: '已發出的郵件'
                ,id: 212
              }, {
                name: '垃圾郵件'
                ,id: 213
              }
            ]
          }, {
            name: '阿里雲郵'
            ,id: 22
            ,children: [
              {
                name: '收件箱'
                ,id: 221
              }, {
                name: '已發出的郵件'
                ,id: 222
              }, {
                name: '垃圾郵件'
                ,id: 223
              }
            ]
          }
        ]
      }
      ,{
        name: '收藏夾'
        ,id: 3
        ,alias: 'changyong'
        ,children: [
          {
            name: '愛情動作片'
            ,id: 31
            ,alias: 'love'
          }, {
            name: '技術棧'
            ,id: 12
            ,children: [
              {
                name: '前端'
                ,id: 121
              }
              ,{
                name: '全端'
                ,id: 122
              }
            ]
          }
        ]
      }
    ]
  });

     在nodes節點中就是我們需要新增的資料,可以看出來他是一個json陣列形勢,當我將資料拼接成上述的字串進行傳入時,發現它並不能動態的將它編譯成所需的,反而是將字串的每一個字元進行了解析。
    只好另找方法,在其官網的論壇上,發現有一人寫的需要將字串轉為json陣列,於是我將字串轉為json陣列傳入時發現還得不到預期結果,於是乎我想是否可以傳入一個陣列,於是乎按我的理解進行了拼接。
    程式碼如下:
function createTree(data) {
	var node = [];
	for (var i = 0; i< data.length; i++) {
		node.push({
			name:'' + data[i].name,
			id: data[i].id
		});
		if (data[i].vehicles.length > 0) {
			var child = [];
			for(var j = 0; j< data[i].vehicles.length; j++) {
				if(isOnLine(data[i].vehicles[j].vin)) {
					child.push({
					name:data[i].vehicles[j].number + '(線上)',
					id: data[i].vehicles[j].vin
					});
				} else {
					child.push({
					name:data[i].vehicles[j].number + '(離線)',
					id: data[i].vehicles[j].vin
					});
				}
				arr.push(data[i].vehicles[j]);
			}
			node[i].children = child;
		}
	}
將node節點傳入便可顯示樹形結構圖。
               寫的有點倉促還請諒解




相關文章