这里不介绍handsontable的文件引入相关问题html
1.初始化handsontable实例web
var container = document.getElementById("id");
var hot = new Handsontable(container,options)
复制代码
其中container是handsontable的容器,options是handsontable的配置obj数组
2.配置optionsbash
配置options,就必须知道其每一个key值所表明的意义,这里写一些通用的文件:app
var options = {
data: this.main,//主体内容
fixedColumnsLeft: 5,//冻结列
colHeaders: this.delHeader(this.headers), //表头文案
columns: this.getType(this.headers), //数据显示格式
filters: true, //启动过滤
maxRows: this.main.length,//最大行
height: 300, //容器的高度
columnSorting: true, //添加排序
sortIndicator: true, //添加排序
renderAllRows: true,
// colWidths: 200,
autoColumnSize: true,
language: "zh-CN", //语言,须要引用包
manualColumnResize: true,//列宽自动适应
manualColumnMove: true,//控制列的移动
dropdownMenu: [ //下拉组件
"filter_by_condition",
"filter_by_value",
"filter_action_bar"
],
contextMenu: {//右键菜单
items: {
remove_row: {
name: "删除选中设备"
}
}
},
// 事件
afterChange: this.tdChange, //修改后
afterFilter: this.trimmedRows, //排序前
afterRemoveRow: this.romoveFm, //右键删除
afterOnCellMouseDown: this.eventClick //鼠标点击
}
复制代码
若是想要知道更多的配置项,能够去hansondtable的文档看看工具
3.事件:在hansontable中我使用的主要是修改和排序点击等功能,如下是相关代码(这里的this.hot为hot的实例对象):ui
//表格中的点击
eventClick(el, rowArr) {
//点击的是表头
if (rowArr.row < 0) {
return;
}
//被筛选事后的数组
let trimmedArr = this.trimmedRows();
//是否启用了排序
let isSort = this.hot.getPlugin("columnSorting").isSorted();
if (trimmedArr.length && isSort) {
let sortArr = this.myHotArr.getPlugin("columnSorting").rowsMapper
.__arrayMap;
let infos = this.main[trimmedArr[sortArr[rowArr.row]]];
this.getInfors(infos, { row: sortArr[rowArr.row], col: rowArr.col });
} else if (isSort) {
//排序后的数组
let sortArr = this.hot.getPlugin("columnSorting").rowsMapper.__arrayMap;
let infos = this.main[sortArr[rowArr.row]];
this.getInfors(infos, { row: sortArr[rowArr.row], col: rowArr.col });
} else if (trimmedArr.length) {
let infos = this.main[trimmedArr[rowArr.row]];
this.getInfors(infos, { row: trimmedArr[rowArr.row], col: rowArr.col });
} else {
let infos = this.main[rowArr.row];
this.getInfors(infos, rowArr);
}
},
/**
* @param infos 当前行的数据
* @param row 排序后正确的行号
*
* @return 你想的操做
*/
getInfors(infos, row) { do something ...}
//获取被筛选掉的行号
trimmedRows() {
//获取被筛选掉的行号
var plugin = this.hot.getPlugin("trimRows").trimmedRows;
let dataLength = this.main.length;
let dataArr = new Array();
for (let i = 0; i < dataLength; i++) {
dataArr.push(i);
}
if (plugin.length <= 0) {
dataArr = [];
} else {
dataArr = this.array_diff(dataArr, plugin);
}
return dataArr;
},
//删除资产
romoveFm() {
//copeMain为删除以前拷贝的原数据
let params = tools.differenceArr(this.main, this.copyMain)
},
//取两个数组的差值
tools.differenceArr = (a, b) => {
return a.concat(b).filter(v => !a.includes(v) || !b.includes(v))
}
复制代码
若是有什么疑问,能够在评论区留言!this