2016-07-14 1 views
1

Я получаю данные с сервера. Данные выглядит следующим образом:Angular2/PrimeNG - перемещение элементов в Treeview динамическим способом

а/ABCA/abcsd/absc.dat

С количеством косых черт, отличающимися от пути к пути.

Теперь я хочу отобразить его в древовидной структуре с использованием PrimeNG. Это насколько я:

for (var i = 0; i < this.test.length; i++) { 
       let regex = /([^\/]+)\/?/g; 
       let result: RegExpExecArray; 

       while ((result = regex.exec(this.test[i])) !== null) { 
        console.log(result[1]); 
        if (result[1].search(".dat")>0) { 
         let item = { 
          "label": result[1], 
          "data": "Documents Folder", 
          "icon": "fa-file-text-o" 
         } 
         this.tree.push(item) 
        } 
        else { 
         let item = { 
          "label": result[1], 
          "data": "Documents Folder", 
          "expandedIcon": "fa-folder-open", 
          "collapsedIcon": "fa-folder", 
          "children": [{ 
          }] 
         } 
         this.tree.push(item) 
        } 
       } 
      } 

«тест» это данные, как описано выше. Я ищу/с регулярным выражением. «результат [1]» даст мне строки между косой чертой. Что я могу сделать сейчас проверяет ли сво .dat или нет, а затем вставьте его в TreeView с treeviewstructure нечто вроде этого (пример сверху):

-abc 
-abca 
-abcsd 
-absc.dat 

Как вы можете видеть, я я не могу отобразить правильную структуру папки. Я могу жестко закодировать его, получив количество косой черты, а затем сделаю случай переключения, чтобы подтолкнуть его в правильном порядке, но я хочу int динамически.

Так что мне нужно это в динамике:

for 3 slashes: 
    first item: this.items.push(item) 
    sec. item : this.items[0].children.push(item) 
    third. item: this.items[0].children[0].children.push(item) 

for x slashes: 
    ??? 

Любые идеи?

ответ

0

Вам нужно создать рекурсивную функцию (функцию, которая вызывает себя, если есть какие-либо дочерние элементы), чтобы она продолжала обходить ее, как дерево. Я просто пишу общий код, чтобы дать вам представление.

for (let role of roles) { 
     if (role.parentID) continue; 

     const roleNode = this.createTreeNodesFromEntities(role, (x: Role) => x.roles); 

     this.roleNodes.push(roleNode); 
    } 


private createTreeNodesFromEntities<T extends { name: string }>(entity: T, getChildren: (x: T) => T[]): TreeNode { 
    let result: TreeNode = { 
     label: entity.name, 
     data: entity, 
     expanded: true, 
     children: [] 
    } 

    getChildren(entity).forEach((childPermission, index) => { 
     let cPermissionNode = this.createTreeNodesFromEntities(childPermission, getChildren); 
     result.children.push(cPermissionNode); 
    }) 

    return result; 
} 

Вы также можете обратиться к ответу here. Надеюсь, что это имеет смысл

Смежные вопросы