handsontable的一些技巧

handsontable

handsontable是一个web化的表格工具(类excel)

这里不介绍handsontable的文件引入相关问题

1.初始化handsontable实例

    var container = document.getElementById("id");
    var hot = new Handsontable(container,options)
复制代码

其中container是handsontable的容器,options是handsontable的配置obj

2.配置options

配置options,就必须知道其每个key值所代表的意义,这里写一些通用的文件:

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的实例对象):

//表格中的点击
    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))
    }
复制代码

如果有什么疑问,可以在评论区留言!

转载于:https://juejin.im/post/5c4a681ef265da611e4dfcfa

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值