ngx-ourpalm-table
v2.1.10
Published
基于angular2.x、bootstrap的表格控件,支持编程式和声明式列配置
Downloads
26
Readme
ngx-ourpalm-table
基于angular5.x、bootstrap的表格控件,支持编程式和声明式列配置
Installation
npm install ngx-ourpalm-table --save
Demo(声明式配置) plnkr
<ourpalm-table [table]="table">
<ourpalm-table-column [column]="{header: '全选', field: 'checkAll', checkbox: true}"></ourpalm-table-column>
<ourpalm-table-column [column]="{header: '序号', field: 'number', rownumbers: true}"></ourpalm-table-column>
<ourpalm-table-column [column]="{header: '姓名', field: 'name'}">
<ng-template let-data="$row">
{{data.name}}
</ng-template>
</ourpalm-table-column>
<ourpalm-table-column [column]="{header: '年龄', field: 'age'}">
<ng-template let-row="$row">
{{row.age}}
</ng-template>
</ourpalm-table-column>
</ourpalm-table>
export class AppComponent {
table: OurpalmTable;
constructor() {
this.table = new OurpalmTable({
loadData: (table: OurpalmTable, callback: (page: Page) => {}) => {
var start = (table.currentPage - 1) * table.pageSize + 1;
var end = start + table.pageSize;
end = end > 86 ? 86 : end;
//构造服务器假数据
var rows = [];
for (; start < end; start++) {
rows.push({
name: `zhangsan${start}`,
age: start,
email: `zhangsan${start}@163.com`
});
}
setTimeout(function () {
callback({
total: 86,
rows: rows
});
}, 300);
}
});
}
}
Demo(编程式配置) plnkr
<ourpalm-table [table]="table"></ourpalm-table>
export class AppComponent {
table: OurpalmTable;
constructor() {
this.table = new OurpalmTable({
columns: [{
header: '全选',
checkbox: true
}, {
header: '序号',
rownumbers: true
}, {
header: '姓名',
field: 'name'
}, {
header: '年龄',
field: 'age'
}],
loadData: (table: OurpalmTable, callback: (page: Page) => {}) => {
var start = (table.currentPage - 1) * table.pageSize + 1;
var end = start + table.pageSize;
end = end > 86 ? 86 : end;
//构造服务器假数据
var rows = [];
for (; start < end; start++) {
rows.push({
name: `zhangsan${start}`,
age: start,
email: `zhangsan${start}@163.com`
});
}
setTimeout(function () {
callback({
total: 86,
rows: rows
});
}, 300);
}
});
}
}
Demo(Card View)
<ourpalm-table [table]="table">
<ourpalm-table-column
[column]="{header: 'Select', field: 'checkAll', checkbox: true}"></ourpalm-table-column>
<ourpalm-table-column
[column]="{header: 'Number', field: 'number', rownumbers: true}"></ourpalm-table-column>
<ourpalm-table-column [column]="{header: 'ID', field: 'ID'}">
<ng-template let-row="$row">
{{row.ID}}
</ng-template>
</ourpalm-table-column>
<ourpalm-table-column [column]="{header: 'Price', field: 'Price', sort: true}">
<ng-template let-row="$row">
{{row.Price}}
</ng-template>
</ourpalm-table-column>
<ourpalm-table-column [column]="{header: 'Cost', field: 'Cost'}">
<ng-template let-row="$row">
{{row.Cost}}
</ng-template>
</ourpalm-table-column>
<ourpalm-table-column [column]="{header: 'Url', field: 'Url'}">
<ng-template let-row="$row">
{{row.Url}}
</ng-template>
</ourpalm-table-column>
<ourpalm-table-column [column]="{header: 'Other', field: 'Other'}">
<ng-template let-row="$row">
{{row.Other}}
</ng-template>
</ourpalm-table-column>
<ourpalm-table-rowview>
<ng-template let-row="$row" let-index="$index">
<div>
<div style="display:inline-block;float:left;"><img [src]="row.Url"></div>
<div style="text-align:left;padding-left:10px;display:inline-block;overflow:auto;">
<p>ID:{{row.ID}}</p>
<p>Price:{{row.Price}}</p>
<p>Cost:{{row.Cost}}</p>
<p style="overflow:auto">Other:{{row.Other}}</p>
</div>
</div>
</ng-template>
</ourpalm-table-rowview>
</ourpalm-table>
export class CardViewComponent {
table: OurpalmTable;
constructor(private http: Http) {
this.table = new OurpalmTable({
rowViewShowType: 'both',
loadData: (table: OurpalmTable, callback: (page: Page) => {}) => {
this.http
.get('http://rapapi.org/mockjsdata/3828/ngx-ourpalm-table/cardview.do')
.map((response) => response.json())
.subscribe((result) => {
console.log(result);
callback({
total: result.data.length,
rows: result.data
});
});
}
});
}
}
表属性
| 属性名 | 属性值类型 | 默认值 | 描述 | |-------------------------|-------------------|--------------------|-----------------------------| | tableClass | string | table table-bordered table-striped table-hover text-center | 自定义表格的class | | autoLoadData | boolean | true | 初始化表格的时候是否自动加载第一页 | | pagination | boolean | true | 是否显示分页控件 | | singleSelect | boolean | false | 是否限制只能选中一行 | | serverSort | boolean | true | 是否要服务器排序 | | multiSort | boolean | true | 是否允许多列排序 | | pageList | array | [10,20,30,40,50] | 在设置分页属性的时候 初始化页面大小选择列表 | | pageSize | int | 10 | 在设置分页属性的时候初始化页面大小 | | skipPage | boolean | true | 在设置分页属性的时候是否允许用户跳转页面 | | cacheKey | string | '' | 客户端存储table信息是对应存放在localStorage中的key | | cachePageSize | boolean | false | 是否在客户端存储table的页大小,刷新的时候页大小不变,保存在localStorage中,key为${cacheKey}-pageSize | | cacheColumns | boolean | false | 是否在客户端存在table的列隐藏信息,刷新的时候列的隐藏信息不变,保存在localStorage中,key为${cacheKey}-columns | | pagePosition | string | bottom | 分页条在那里显示可取值 'bottom', 'top', 'both' | | showRefreshBtn | boolean | true | 是否显示刷新按钮 | | showSettingBtn | boolean | true | 是否显示设置按钮 | | checkOnSelect | boolean | true | 选择CheckBox时级联选中当前行 | | selectOnCheck | boolean | true | 选择当前行时级联选中checkbox | | ctrlSelect | boolean | false | 多选时需要按住ctrl键 | | rowMenus | any[] | null | 右键上下文菜单 | | rowView | RowView | null | 自定义row显示 | | rowViewShowType | 'rowView' | 'column' | 'both' | rowView | 自定义行渲染模式 |
列属性
| 属性名 | 属性值类型 | 默认值 | 描述 |
|-------------------------|-------------------|--------------------|-----------------------------|
| header | string | '' | 表头 |
| field | string | '' | 字段名称 |
| sort | boolean | false | 是否列排序 |
| sortOrder | string | null | 列排序方向,取值 asc 或 desc 或 null|
| rownumbers | boolean | false | 是否为行号列 1...* |
| show | boolean | true | 是否隐藏列 |
| checkbox | boolean | false | 是否为多选列 |
| sorter | function | undefined | 服务器排序不需要设置,客户端排序需要设置,sorter: (column, row1, row2) => row1[column.field] - row2[column.field]
|
| styler | ()=>any | any | '' | 设置表格cell的样式,styler: (rowIndex, columnIndex, rowData) => return { color: 'red' }
or styler: { color: 'red' }
|
| clazz | string | '' | 设置表格cell的class |
| disabledContextMenu | boolean | false | 是否在当前列上禁用上下文菜单 |
右键菜单属性
| 属性名 | 属性值类型 | 默认值 | 描述 | |-------------------------|-------------------|--------------------|-----------------------------| | text | string | '' | 菜单名字 | | iconCls | string | '' | 菜单icon | | separator | boolean | false | 分割线 | | show | boolean | ()=>boolean | true | 是否显示 | | onclick | function | false | 点击时触发 | | submenus | any[] | null | 子菜单 |
方法
| 方法名 | 参数 | 描述 | |-------------------------|-------------------|-------------------------------------------------| | getDisplayedColumns | | 获取显示的列信息 | | getDisplayedRows | | 获取显示的行信息 | | getSelectedRows | | 获取选中的行信息 | | getCheck edRows | | 获取勾选中的行信息 | | getSortColumns | | 获取排序的列信息 | | changeColumns | columns[] | 动态修改表的列定义,只支持编程方式,不支持声明式方式 | | chagePageSize | pageSize | 动态修改表的分页大小 | | firstPage | | 跳转到第一页 | | prePage | | 跳转到上一页 | | nextPage | | 跳转到下一页 | | lastPage | | 跳转到最后一页 | | refresh | | 刷新当前页 | | gotoSkipPage | page:number | 跳转页 1...最大页 | | setOptions |options:OurpalmTable| 修改表配置项,修改后将触发加载数据 | | setPageData | pageData: Page | 设置当页数据 | | checkAll | | 勾选当前页中的所有行 | | uncheckAll | | 取消勾选当前页中的所有行 | | checkRow | index | 勾选一行,行索引从0开始,传入行索引 | | uncheckRow | index | 取消勾选一行,行索引从0开始,传入行索引 | | openSetting | | 打开设置列面板 |
事件
| 事件名 | 参数 | 描述 | |-------------------------|-------------------|-------------------------------------------------| | onClickRow | rowIndex, rowData | 在用户点击一行的时候触发,参数包括:rowIndex:点击的行的索引值,该索引值从0开始。rowData:对应于点击行的记录。 | | onDblClickRow | rowIndex, rowData | 在用户双击一行的时候触发,参数包括:rowIndex:点击的行的索引值,该索引值从0开始。rowData:对应于点击行的记录。 | | onClickCell | rowIndex, cellIndex, rowData, column | 在用户点击一个单元格的时候触发。 | | onDblClickCell | rowIndex, cellIndex, rowData, column | 在用户双击一个单元格的时候触发。 | | onHeaderCheckBoxChange| | 选择header中多选框时触发 | | onRowCheckBoxChange | rowData, rowIndex | 用户选中表格行时触发 | | trackByFun | rowIndex, rowData | ngFor tr trackBy |
全局配置
@NgModule({
imports: [
OurpalmTableModule.forRoot()
]
})
export class AppModule {
constructor(private tableConfig: TableConfig) {
this.tableConfig.config = {
pageSize: 50,
pageList: [50, 100, 200]
}
}
}
创建table
@Component({
selector: 'dynamic-table',
template: `
<button (click)="log()">click event test</button>
<button (click)="changeTable1()">table01</button>
<button (click)="changeTable2()">table02</button>
<ourpalm-table [table]="table"></ourpalm-table>
`
})
export class DynamicTableComponent {
table: OurpalmTable;
constructor(private tableConfig: TableConfig) {
//不继承全局配置
this.table = new Table({
cacheKey: 'table01',
cachePageSize: true,
cacheColumns: true,
loadData: () => {
}
});
//继承全局配置
this.table = this.tableConfig.create({
cacheKey: 'table01',
cachePageSize: true,
cacheColumns: true,
pagePosition: 'both',
loadData: () => {
}
});
}
}