2017-07-31 44 views
0

我正在使用Angular-Tree-Component在我的應用程序上顯示樹視圖。但是,一旦在節點上,我需要獲得該節點下的所有孩子以及他們的孩子的列表。如何從角樹組件上的所有孩子獲取ID?

我看到他們有被調用我在節點下的每個節點上的文檔doForAll功能。

https://rawgit.com/500tech/angular-tree-component/master/doc/interfaces/api.itreenode.html#doforall

我可以調用這個函數,它工作正常,當我做一個console.log,但是當我嘗試將我的節點的ID推送到我的數組時,我只能得到第一個元素。

getChildren(node: TreeNode) { 
    node.doForAll((data) => { 
     console.log(data.id); 
     this.guideArray.push(data.id); 
    }); 
    console.log(this.guideArray); 
    } 

enter image description here

enter image description here

+0

試推後立刻移動最後的console.log - 內環路,看看它的工作原理則..不知道,但doForAll內部的'this'可能與命令完成時的'this'不同。讓我知道你的發現!可能需要某種綁定命令。 – JGFMK

+0

@JGFMK當我推動到陣列後,我移動console.log我可以在控制檯上看到它的推送ID,但是當我展開數組[0]時,我可以看到所有元素 – Ennio

+0

你可以插入屏幕截圖到題。也許只是重複行而不是移動 - 最後一個是console.log(「Final:」,this.guideArray); – JGFMK

回答

2

您遇到的問題是,console.log後您調用的方法不知道最新的陣列狀態。這是因爲doForAll的實現使用了一個異步的Promise。所以console.log命令不記錄最新的狀態。

你可以創建一個這樣的所有節點的BehaviorSubject

getChildren(node: TreeNode) { 
    let nodeIds$ = new BehaviorSubject([]); 
    node.doForAll((data) => { 
     nodeIds$.next(nodeIds$.getValue().concat(data.id)); 
    }); 
    return nodeIds$; 
} 

參見:implementation of doForAll

+0

是的,這聽起來不錯。 – JGFMK

+0

我剛看到這個。 – Ennio

+0

感謝您的幫助,這工作:) – Ennio

相關問題