如何为 PrimeNG 树 (P-Tree) 组件整形数据源?
How to shape the data source for PrimeNG Tree (P-Tree) Component?
我对 Angular 和 PrimeNG 组件还很陌生。我想构建一个带有子节点的树视图,PrimeNG 提供了组件开箱即用的解决方案。但是,所有示例都有硬编码数据源。在我的例子中,数据源来自数据库,我不知道我是否必须调整我的数据以匹配 P-Tree 的预期(见下文)。如果是,实现它的技术是什么?
下面是 P-Tree 的数据源示例。
{
"label": "Pictures",
"data": "Pictures Folder",
"expandedIcon": "pi pi-folder-open",
"collapsedIcon": "pi pi-folder",
"children": [
{"label": "barcelona.jpg", "icon": "pi pi-image", "data": "Barcelona Photo"},
{"label": "logo.jpg", "icon": "pi pi-file", "data": "PrimeFaces Logo"},
{"label": "primeui.png", "icon": "pi pi-image", "data": "PrimeUI Logo"}]
}
是的,因为数据必须匹配 TreeNode 接口。
export interface TreeNode {
data?: any;
children?: TreeNode[];
leaf?: boolean;
expanded?: boolean;
label?: string;
expandedIcon?: string:
collapsedIcon?: string;
}
如果你有 API,你可以这样做。
@Injectable()
export class NodeService {
constructor(private http: Http) {}
getFilesystem() {
return this.http.get('showcase/resources/data/filesystem.json')
.toPromise()
.then(res => <TreeNode[]> res.json().data);
}
}
p-treeSelect 和 p-treeTable 文档有几个很好的例子:
https://www.primefaces.org/primeng/showcase/#/treeselect https://www.primefaces.org/primeng/showcase/#/treetable.
我的问题已经解决了。使用递归的方法构建树状层次结构,父ID为根,子代属于父代。数据 table 作为参数传递到方法中。该方法遍历整个数据 table.
foreach (DataRow dr in dtData.Select("ParentID = '" + ID+ "'"))
{
// recursive
folder.children.Add(
new ChildFolder()
{
label = dr["Name"].ToString(),
children = GetChildren(Convert.ToInt32(dr["ID"]), dtData),
data = Convert.ToString(dr["ID"])
});
}
return folder;
我对 Angular 和 PrimeNG 组件还很陌生。我想构建一个带有子节点的树视图,PrimeNG 提供了组件开箱即用的解决方案。但是,所有示例都有硬编码数据源。在我的例子中,数据源来自数据库,我不知道我是否必须调整我的数据以匹配 P-Tree 的预期(见下文)。如果是,实现它的技术是什么?
下面是 P-Tree 的数据源示例。
{
"label": "Pictures",
"data": "Pictures Folder",
"expandedIcon": "pi pi-folder-open",
"collapsedIcon": "pi pi-folder",
"children": [
{"label": "barcelona.jpg", "icon": "pi pi-image", "data": "Barcelona Photo"},
{"label": "logo.jpg", "icon": "pi pi-file", "data": "PrimeFaces Logo"},
{"label": "primeui.png", "icon": "pi pi-image", "data": "PrimeUI Logo"}]
}
是的,因为数据必须匹配 TreeNode 接口。
export interface TreeNode {
data?: any;
children?: TreeNode[];
leaf?: boolean;
expanded?: boolean;
label?: string;
expandedIcon?: string:
collapsedIcon?: string;
}
如果你有 API,你可以这样做。
@Injectable()
export class NodeService {
constructor(private http: Http) {}
getFilesystem() {
return this.http.get('showcase/resources/data/filesystem.json')
.toPromise()
.then(res => <TreeNode[]> res.json().data);
}
}
p-treeSelect 和 p-treeTable 文档有几个很好的例子: https://www.primefaces.org/primeng/showcase/#/treeselect https://www.primefaces.org/primeng/showcase/#/treetable.
我的问题已经解决了。使用递归的方法构建树状层次结构,父ID为根,子代属于父代。数据 table 作为参数传递到方法中。该方法遍历整个数据 table.
foreach (DataRow dr in dtData.Select("ParentID = '" + ID+ "'"))
{
// recursive
folder.children.Add(
new ChildFolder()
{
label = dr["Name"].ToString(),
children = GetChildren(Convert.ToInt32(dr["ID"]), dtData),
data = Convert.ToString(dr["ID"])
});
}
return folder;