树格指导
通过使用Angular和Bootstrap在树结构中显示数据的网格。
它是开源(麻省理工学院许可证)
随时可以做任何您想做的事情。
demo :: http://khan4019.github.io/tree-grid-diractive/test/treegrid.html
最小的小型
####任何一个:
与鲍尔安装
$ bower install angular-bootstrap-grid-tree
使用NPM安装
$ npm install angular-bootstrap-grid-tree
####或:在Bootstrap和Angular之后,在HTML文件中包含src/treeGrid.css和src/tree-grid-directive.js 。
####然后
只需添加以下内容
<tree-grid tree-data="tree_data"></tree-grid>
将模块作为您的应用程序中的依赖性:
angular.module('myApp', ['treeGrid'])
tree_data:是对象的数组。如果对象有孩子,将它们放在对象的children阵列中。树数据的一个例子看起来像:
$scope.tree_data = [
{Name:"USA",Area:9826675,Population:318212000,TimeZone:"UTC -5 to -10",
children:[
{Name:"California", Area:423970,Population:38340000,TimeZone:"Pacific Time",
children:[
{Name:"San Francisco", Area:231,Population:837442,TimeZone:"PST"},
{Name:"Los Angeles", Area:503,Population:3904657,TimeZone:"PST"}
]
},
{Name:"Illinois", Area:57914,Population:12882135,TimeZone:"Central Time Zone",
children:[
{Name:"Chicago", Area:234,Population:2695598,TimeZone:"CST"}
]
}
]
},
{Name:"Texas",Area:268581,Population:26448193,TimeZone:"Mountain"}
];
如果您的数组按主键和父键排序,则可以在temp文件夹中使用getTree方法。
更多选项
如果需要更多自定义,则可以使用以下选项:
<tree-grid
tree-data = "tree_data"
col-defs = "col_defs"
expand-on = "expanding_property"
tree-control = "my_tree"
icon-leaf = "icon-file"
icon-expand = "icon-plus-sign"
icon-collapse = "icon-minus-sign"
on-select = "my_tree_handler(branch)"
on-click = "my_tree_handler(branch)"
template-url = "path/to/treegrid/template.html"
expand-level = "2"
expand-to = "expand_to">
</tree-grid>
col_defs:是一系列对象,使您可以自定义列标题。如果未提供displayName ,则将field (对象属性)用作displayName 。
有效属性是:
field: Hook to the field to know the column position in the table.
displayName: Text that will be used in the column header.
cellTemplate: Template that will be used to show the value. Useful if
you want to show images, for instance.
cellTemplateScope: Used to pass the controllers methods you want to be
used inside the cell template.
sortable: The user can sort by the values of this field
sortingType: The type of the field, for sorting or filtering purposes.
Possible values are "number", for numeric sorting, or
"string" for alphabetic sorting (this is the default)
filterable: This field will be searched when filtering
例子:
$scope.col_defs = [
{ field: "Description" },
{
field: "DemographicId",
displayName: "Demographic Id",
sortable : true,
filterable : true
},
{
field: "ParentId",
displayName: "Parent Id"
},
{ field: "Area",
sortable : true,
sortingType : "number",
filterable : true
},
{ field: "Population" },
{
field: "image",
displayName: "Image",
cellTemplate: "<img ng-click='cellTemplateScope.click(\'example\')' ng-src='{{ row.branch[col.field] }}' />",
cellTemplateScope: {
click: function(data) { // this works too: $scope.someMethod;
console.log(data);
}
}
}
];
如果您希望动态定义col_defs(例如,如果列名来自服务),则可以按照[本期]中指定的说明(#51)。
Expanding_property:这是tree_data中对象的属性,您需要在其中放置扩展和折叠的能力。这接受与col_defs相同格式的数组,可以在扩展字段上进行分类和过滤。现在,这包括提供CellTemplate的能力(但不提供CellTemplateScope)。
my_tree:您可以使用tree-control使用全部扩展并崩溃。在“演示”提供的链接中查看。
图标:定义字体很棒,引导镜头宽带膨胀,塌陷和叶子。
template-url:用于使用自定义模板的URL。
扩展级别:树的深度,您需要在加载时展开 - 默认值现在将其设置为0 IE树。请注意,一旦设置,您就不能折叠在此深度下方的树。
扩展到: $rootscope字段该指令将注意编程扩展。当更改时,指令将在树上搜索具有相同值的展开property,并将树扩展到该点。所有其他分支将崩溃。
选择:单击+/-图标时,请单击处理程序。
$scope.my_tree_handler = function(branch){
console.log('you clicked on', branch)
}
单击:单击处理程序在单击扩展属性时,如果选择分支,则需要重定向时。
$scope.my_tree_handler = function(branch){
console.log('you clicked on', branch)
}
每行设置图标
如果数据包含不同的类型,则使用不同的图标区分它们可能很有用。每行都可以以下三个图标设置:
- 如果行是叶子,偶像的图标将显示
- 图标崩溃了,如果行有孩子并扩展,将显示的图标将显示
- 如果该行有孩子并崩溃,将显示的图标将显示
如果没有定义,则每个不是Overriden的图标都将是在树格指令或默认指令上定义的图标。
例子:
< tree-grid
tree-data = " tree_data "
icon-leaf = " icon-file "
icon-expand = " icon-plus-sign "
icon-collapse = " icon-minus-sign "
</ tree-grid > $scope . tree_data = [
{ Name : "USA" , Area : 9826675 , Population : 318212000 , TimeZone : "UTC -5 to -10" ,
children : [
{ Name : "California" , Area : 423970 , Population : 38340000 , TimeZone : "Pacific Time" ,
children : [
{ Name : "San Francisco" , Area : 231 , Population : 837442 , TimeZone : "PST" } ,
{ Name : "Los Angeles" , Area : 503 , Population : 3904657 , TimeZone : "PST" }
]
icons : {
iconLeaf : " fa fa - sun - o "
}
} ,
{ Name : "Illinois" , Area : 57914 , Population : 12882135 , TimeZone : "Central Time Zone" ,
children : [
{ Name : "Chicago" , Area : 234 , Population : 2695598 , TimeZone : "CST" }
]
}
] ,
icons : {
iconLeaf : "fa fa-flag" ,
iconCollapse : "fa fa-folder-open" ,
iconExpand : "fa fa-folder"
}
} ,
{ Name : "Texas" , Area : 268581 , Population : 26448193 , TimeZone : "Mountain" }
] ;搜索后膨胀树
如果需要在(成功)搜索后展开树,则需要修改模板并为滤波器参数添加true 。
<tr ng-repeat="row in tree_rows | searchFor:$parent.filterString:expandingProperty:colDefinitions: true track by row.branch.uid">完整示例(基于原始模板):
< div class =" table-responsive " >
< table class =" table tree-grid " >
< thead >
< tr >
< th > < a ng-if =" expandingProperty.sortable " ng-click =" sortBy(expandingProperty) " > {{expandingProperty.displayName || expandingProperty.field || expandingProperty}} </ a > < span ng-if =" !expandingProperty.sortable " > {{expandingProperty.displayName || expandingProperty.field || expandingProperty}} </ span > < i ng-if =" expandingProperty.sorted " class =" {{expandingProperty.sortingIcon}} pull-right " > </ i > </ th >
< th ng-repeat =" col in colDefinitions " > < a ng-if =" col.sortable " ng-click =" sortBy(col) " > {{col.displayName || col.field}} </ a > < span ng-if =" !col.sortable " > {{col.displayName || col.field}} </ span > < i ng-if =" col.sorted " class =" {{col.sortingIcon}} pull-right " > </ i > </ th >
</ tr >
</ thead >
< tbody >
< tr ng-repeat =" row in tree_rows | searchFor:$parent.filterString:expandingProperty:colDefinitions:true track by row.branch.uid "
ng-class =" 'level-' + {{ row.level }} + (row.branch.selected ? ' active':'') " class =" tree-grid-row " >
< td > < a ng-click =" user_clicks_branch(row.branch) " > < i ng-class =" row.tree_icon "
ng-click =" row.branch.expanded = !row.branch.expanded "
class =" indented tree-icon " > </ i > </ a > < span class =" indented tree-label " ng-click =" on_user_click(row.branch) " >
{{row.branch[expandingProperty.field] || row.branch[expandingProperty]}} </ span >
</ td >
< td ng-repeat =" col in colDefinitions " >
< div ng-if =" col.cellTemplate " compile =" col.cellTemplate " cell-template-scope =" col.cellTemplateScope " > </ div >
< div ng-if =" !col.cellTemplate " > {{row.branch[col.field]}} </ div >
</ td >
</ tr >
</ tbody >
</ table >
</ div >指定模板
有两种方法可以指定分页控制指令的模板:
-
使用应用程序配置块中的“ TreeGridTemplateProvider”为应用程序设置全局模板:
myApp.config(function(treegridTemplateProvider) { treegridTemplateProvider.setPath('path/to/treegrid/template.html'); }); -
使用每个TreeGrid指令上的
template-url属性覆盖一个特定的实例:<tree-grid tree-data="treegrid" col-defs="col_defs" template-url="path/to/treegrid/template.html"></tree-grid>
从REST API(或某些外部资源)加载树数据。
首先,将tree_data设置为一个空数组:
$scope.tree_data = [];
稍后,使用承诺执行查询,并使用已解决的对象更新tree_data值:
APIEndpoint
.find()
.then(function(objects){
$scope.tree_data = prepareDataForTreegrid(objects);
});
自定义单元模板
如果出于任何原因,您要使用自定义的HTML显示特定的单元格,以显示图像,颜色点或其他内容,则可以在col-defs阵列中使用cellTemplate选项,只需将{{ row.branch[col.field] }}用作占位符的占位符,以便将其置于html -html -field -field {{ row.branch[expandingProperty.field] }} rofferapt field.field {扩展属性的模板。
例子:
$scope.col_defs = [
{
field: "DemographicId",
displayName: "Demographic Id",
cellTemplate: "<img ng-src="{{ row.branch[col.field] }}" />"
}
];
您可以使用所需的任何HTML,所有角指令都可以按预期工作。
另外,如果您需要使用单元格模板中的范围中的范围中的某些方法或变量,则可以将cellTemplate的引用传递为:
cellTemplateScope: {
click: function(data) { // this works too: $scope.someMethod;
console.log(data);
}
}
然后在cellTemplate中使用它为:
cellTemplate: "<img ng-click="cellTemplateScope.click(row.branch[col.field])" ng-src="{{ row.branch[col.field] }}" />",
并将按预期工作。
受ABN树的启发
发布历史
| 版本 | 日期 | 更改摘要 |
|---|---|---|
| 0.4.0 | 2016年7月6日 | 添加Expand_to功能 |
| 0.3.0 | 2016年5月30日 | 同步NPM并正确释放 |
| 0.2.0 | 2016年5月24日 | 各种代码修复 |
| 0.1.0 | 2016年5月13日 | 最初的NPM发布 |
通过命令行克隆项目: