2016-07-14 8 views
1

サーバーからデータを取得しています。スラッシュの量はパスへのパスは異なるものでAngular2/PrimeNG - 項目を動的にツリービューにプッシュ

ABC/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) 
        } 
       } 
      } 

「テスト」は、データです。 正規表現で/を検索しています。 "result [1]"はスラッシュの間の文字列を私に与えます。 私は今で行うことができる午前ことtreeviewstructureは、この(上記の例)のようなものであることと、ツリービューに押し込みの.datそのAか否かが、その後チェックして:あなたは私を見ることができるように

-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を参照することもできます。 意味があることを願う

関連する問題