handsontable使用及遇到的坑-前言

本文详细介绍了Handsontable表格组件的常见配置项及其用途。包括列头、行头的显示方式,手动调整列宽和行高的功能,以及单元格合并等特性。同时,提供了自定义渲染方法的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

handsontable的配置项有哪些

只说明常用的

    interface DefaultSettings extends GridSettings {}
    interface DefaultSettings extends Hooks {}

配置继承GridSettings 和Hooks

GridSettings

    interface GridSettings extends Hooks {
      allowEmpty?: boolean;
      allowHtml?: boolean;
      allowInsertColumn?: boolean;
      allowInsertRow?: boolean;
      allowInvalid?: boolean;
      allowRemoveColumn?: boolean;
      allowRemoveRow?: boolean;
      autoColumnSize?: object | boolean;
      autoComplete?: any[];
      autoRowSize?: object | boolean;
      autoWrapCol?: boolean;
      autoWrapRow?: boolean;
      bindRowsWithHeaders?: boolean | string; // pro
      cell?: any[];
      cells?: (row?: number, col?: number, prop?: object) => GridSettings;
      checkedTemplate?: boolean | string;
      className?: string | any[];
      colHeaders?: ((index?: number) => void) | boolean | any[];
      collapsibleColumns?: boolean | any[]; // pro
      columnHeaderHeight?: number | any[];
      columns?: ((index?: number) => void) | any[];
      columnSorting?: boolean | object;
      columnSummary?: object; // pro
      colWidths?: ((index?: number) => void) | number | string | any[];
      commentedCellClassName?: string;
      comments?: boolean | CommentObject[];
      contextMenu?: boolean | any[] | contextMenu.Settings;
      contextMenuCopyPaste?: object;
      copyable?: boolean;
      copyColsLimit?: number;
      copyPaste?: boolean;
      copyRowsLimit?: number;
      correctFormat?: boolean;
      currentColClassName?: string;
      currentHeaderClassName?: string;
      currentRowClassName?: string;
      customBorders?: boolean | any[];
      data?: any | any[];
      dataSchema?: object;
      dateFormat?: string;
      numericFormat?: object;
      debug?: boolean;
      defaultDate?: string;
      disableVisualSelection?: boolean | string | any[];
      dropdownMenu?: boolean | object | any[]; // pro
      editor?: string | (() => void) | boolean;
      enterBeginsEditing?: boolean;
      enterMoves?: object | (() => void);
      fillHandle?: boolean | string | object;
      filter?: boolean;
      filteringCaseSensitive?: boolean;
      filters?: boolean; // pro
      fixedColumnsLeft?: number;
      fixedRowsBottom?: number; // pro
      fixedRowsTop?: number;
      fragmentSelection?: boolean | string;
      ganttChart?: object; // pro
      headerTooltips?: boolean | object; // pro
      height?: number | (() => void);
      hiddenColumns?: boolean | object; // pro
      hiddenRows?: boolean | object; // pro
      invalidCellClassName?: string;
      isEmptyCol?: (col: number) => boolean;
      isEmptyRow?: (row: number) => boolean;
      label?: object;
      language?: string;
      manualColumnFreeze?: boolean;
      manualColumnMove?: boolean | any[];
      manualColumnResize?: boolean | any[];
      manualRowMove?: boolean | any[];
      manualRowResize?: boolean | any[];
      maxCols?: number;
      maxRows?: number;
      mergeCells?: boolean | any[];
      minCols?: number;
      minRows?: number;
      minSpareCols?: number;
      minSpareRows?: number;
      selectionMode?: 'single' | 'range' | 'multiple';
      nestedHeaders?: any[]; // pro
      noWordWrapClassName?: string;
      observeChanges?: boolean;
      observeDOMVisibility?: boolean;
      outsideClickDeselects?: boolean | ((target: HTMLElement) => boolean);
      pasteMode?: string;
      persistentState?: boolean;
      placeholder?: any;
      placeholderCellClassName?: string;
      preventOverflow?: string | boolean;
      readOnly?: boolean;
      readOnlyCellClassName?: string;
      renderAllRows?: boolean;
      renderer?: string | renderers.Base;
      rowHeaders?: boolean | any[] | (() => void);
      rowHeaderWidth?: number | any[];
      rowHeights?: any[] | (() => void) | number | string;
      search?: boolean;
      selectOptions?: any[];
      skipColumnOnPaste?: boolean;
      sortByRelevance?: boolean;
      sortFunction?: () => void;
      sortIndicator?: boolean;
      source?: any[] | (() => void);
      startCols?: number;
      startRows?: number;
      stretchH?: string;
      strict?: boolean;
      tableClassName?: string | any[];
      tabMoves?: object;
      title?: string;
      trimDropdown?: boolean;
      trimRows?: boolean; // pro
      trimWhitespace?: boolean;
      type?: string;
      uncheckedTemplate?: boolean | string;
      undo?: boolean;
      valid?: boolean;
      validator?: (value: any, callback: (valid: boolean) => void) => void | RegExp;
      viewportColumnRenderingOffset?: number | string;
      viewportRowRenderingOffset?: number | string;
      visibleRows?: number;
      width?: number | (() => void);
      wordWrap?: boolean;
    }
    interface Hooks {
      afterAddChild?: (parent: object, element: object | void, index: number | void) => void;
      afterBeginEdting?: (row: number, column: number) => void;
      afterCellMetaReset?: () => void;
      afterChange?: (changes: any[], source: string) => void;
      afterChangesObserved?: () => void;
      afterColumnMove?: (startColumn: number, endColumn: number) => void;
      afterColumnResize?: (currentColumn: number, newSize: number, isDoubleClick: boolean) => void;
      afterColumnSort?: (column: number, order: boolean) => void;
      afterContextMenuDefaultOptions?: (predefinedItems: any[]) => void;
      afterContextMenuHide?: (context: object) => void;
      beforeContextMenuShow?: (context: object) => void;
      afterContextMenuShow?: (context: object) => void;
      afterCopy?: (data: any[], coords: any[]) => void;
      afterCopyLimit?: (selectedRows: number, selectedColumnds: number, copyRowsLimit: number, copyColumnsLimit: number) => void;
      afterCreateCol?: (index: number, amount: number) => void;
      afterCreateRow?: (index: number, amount: number) => void;
      afterCut?: (data: any[], coords: any[]) => void;
      afterDeselect?: () => void;
      afterDestroy?: () => void;
      afterDetachChild?: (parent: object, element: object) => void;
      afterDocumentKeyDown?: (event: Event) => void;
      afterDropdownMenuDefaultOptions?: (predefinedItems: any[]) => void;
      afterDropdownMenuHide?: (instance: any) => void;
      beforeDropdownMenuShow?: (instance: any) => void;
      afterDropdownMenuShow?: (instance: any) => void;
      afterFilter?: (formulasStack: any[]) => void;
      afterGetCellMeta?: (row: number, col: number, cellProperties: GridSettings) => void;
      afterGetColHeader?: (col: number, TH: Element) => void;
      afterGetColumnHeaderRenderers?: (array: any[]) => void;
      afterGetRowHeader?: (row: number, TH: Element) => void;
      afterGetRowHeaderRenderers?: (array: any[]) => void;
      afterInit?: () => void;
      afterLoadData?: (firstTime: boolean) => void;
      afterModifyTransformEnd?: (coords: wot.CellCoords, rowTransformDir: number, colTransformDir: number) => void;
      afterModifyTransformStart?: (coords: wot.CellCoords, rowTransformDir: number, colTransformDir: number) => void;
      afterMomentumScroll?: () => void;
      afterOnCellCornerDblClick?: (event: object) => void;
      afterOnCellCornerMouseDown?: (event: object) => void;
      afterOnCellMouseDown?: (event: object, coords: object, TD: Element) => void;
      afterOnCellMouseOver?: (event: object, coords: object, TD: Element) => void;
      afterOnCellMouseOut?: (event: object, coords: object, TD: Element) => void;
      afterPaste?: (data: any[], coords: any[]) => void;
      afterPluginsInitialized?: () => void;
      afterRedo?: (action: object) => void;
      afterRemoveCol?: (index: number, amount: number) => void;
      afterRemoveRow?: (index: number, amount: number) => void;
      afterRender?: (isForced: boolean) => void;
      afterRenderer?: (TD: Element, row: number, col: number, prop: string | number, value: string, cellProperties: GridSettings) => void;
      afterRowMove?: (startRow: number, endRow: number) => void;
      afterRowResize?: (currentRow: number, newSize: number, isDoubleClick: boolean) => void;
      afterScrollHorizontally?: () => void;
      afterScrollVertically?: () => void;
      afterSelection?: (r: number, c: number, r2: number, c2: number, preventScrolling: object, selectionLayerLevel: number) => void;
      afterSelectionByProp?: (r: number, p: string, r2: number, p2: string, preventScrolling: object, selectionLayerLevel: number) => void;
      afterSelectionEnd?: (r: number, c: number, r2: number, c2: number, selectionLayerLevel: number) => void;
      afterSelectionEndByProp?: (r: number, p: string, r2: number, p2: string, selectionLayerLevel: number) => void;
      afterSetCellMeta?: (row: number, col: number, key: string, value: any) => void;
      afterSetDataAtCell?: (changes: any[], source?: string) => void;
      afterSetDataAtRowProp?: (changes: any[], source?: string) => void;
      afterTrimRow?: (rows: any[]) => void;
      afterUndo?: (action: object) => void;
      afterUntrimRow?: (rows: any[]) => void;
      afterUpdateSettings?: () => void;
      afterValidate?: (isValid: boolean, value: any, row: number, prop: string | number, source: string) => void | boolean;
      afterViewportColumnCalculatorOverride?: (calc: object) => void;
      afterViewportRowCalculatorOverride?: (calc: object) => void;
      beforeAddChild?: (parent: object, element: object | void, index: number | void) => void;
      beforeAutofill?: (start: object, end: object, data: any[]) => void;
      beforeAutofillInsidePopulate?: (index: object, direction: string, input: any[], deltas: any[]) => void;
      beforeCellAlignment?: (stateBefore: any, range: any, type: string, alignmentClass: string) => void;
      beforeChange?: (changes: any[], source: string) => void;
      beforeChangeRender?: (changes: any[], source: string) => void;
      beforeColumnMove?: (startColumn: number, endColumn: number) => void;
      beforeColumnResize?: (currentColumn: number, newSize: number, isDoubleClick: boolean) => void;
      beforeColumnSort?: (column: number, order: boolean) => void;
      beforeContextMenuSetItems?: (menuItems: any[]) => void;
      beforeCopy?: (data: any[], coords: any[]) => any;
      beforeCreateCol?: (index: number, amount: number, source?: string) => void;
      beforeCreateRow?: (index: number, amount: number, source?: string) => void;
      beforeCut?: (data: any[], coords: any[]) => any;
      beforeDetachChild?: (parent: object, element: object) => void;
      beforeDrawBorders?: (corners: any[], borderClassName: string) => void;
      beforeDropdownMenuSetItems?: (menuItems: any[]) => void;
      beforeFilter?: (formulasStack: any[]) => void;
      beforeGetCellMeta?: (row: number, col: number, cellProperties: GridSettings) => void;
      beforeInit?: () => void;
      beforeInitWalkontable?: (walkontableConfig: object) => void;
      beforeKeyDown?: (event: Event) => void;
      beforeOnCellMouseDown?: (event: Event, coords: object, TD: Element) => void;
      beforeOnCellMouseOut?: (event: Event, coords: wot.CellCoords, TD: Element) => void;
      beforeOnCellMouseOver?: (event: Event, coords: wot.CellCoords, TD: Element, blockCalculations: object) => void;
      beforePaste?: (data: any[], coords: any[]) => any;
      beforeRedo?: (action: object) => void;
      beforeRemoveCol?: (index: number, amount: number, logicalCols?: any[]) => void;
      beforeRemoveRow?: (index: number, amount: number, logicalRows?: any[]) => void;
      beforeRender?: (isForced: boolean, skipRender: object) => void;
      beforeRenderer?: (TD: Element, row: number, col: number, prop: string | number, value: string, cellProperties: GridSettings) => void;
      beforeRowMove?: (startRow: number, endRow: number) => void;
      beforeRowResize?: (currentRow: number, newSize: number, isDoubleClick: boolean) => any;
      beforeSetRangeEnd?: (coords: wot.CellCoords) => void;
      beforeSetRangeStart?: (coords: wot.CellCoords) => void;
      beforeStretchingColumnWidth?: (stretchedWidth: number, column: number) => void;
      beforeTouchScroll?: () => void;
      beforeUndo?: (action: object) => void;
      beforeValidate?: (value: any, row: number, prop: string | number, source?: string) => void;
      beforeValueRender?: (value: any, cellProperties: object) => void;
      construct?: () => void;
      hiddenColumn?: (column: number) => void;
      hiddenRow?: (row: number) => void;
      init?: () => void;
      manualRowHeights?: (state: any[]) => void;
      modifyAutofillRange?: (startArea: any[], entireArea: any[]) => void;
      modifyCol?: (col: number) => void;
      modifyColHeader?: (column: number) => void;
      modifyColWidth?: (width: number, col: number) => void;
      modifyCopyableRange?: (copyableRanges: any[]) => void;
      modifyData?: (row: number, column: number, valueHolder: object, ioMode: string) => void;
      modifyRow?: (row: number) => void;
      modifyRowHeader?: (row: number) => void;
      modifyRowHeaderWidth?: (rowHeaderWidth: number) => void;
      modifyRowHeight?: (height: number, row: number) => void;
      modifyRowSourceData?: (row: number) => void;
      modifyTransformEnd?: (delta: wot.CellCoords) => void;
      modifyTransformStart?: (delta: wot.CellCoords) => void;
      persistentStateLoad?: (key: string, valuePlaceholder: object) => void;
      persistentStateReset?: (key: string) => void;
      persistentStateSave?: (key: string, value: any) => void;
      skipLengthCache?: (delay: number) => void;
      unmodifyCol?: (col: number) => void;
      unmodifyRow?: (row: number) => void;
    }

用这些配置的方法

/**
    settings就是上面的那些配置项,第二个参数初始化时为true,已经渲染表格的话用false
*/
let handsontableInstance.updateSettings({...settings}, false);

常用配置解释

{
      colHeaders: true, //header就是顶部的ABCD,可以是自定义数组
      rowHeaders: true, //就是左边的1,2,3
      manualColumnResize: true, //是否可以手动拖拽列宽
      manualRowResize: true, // 拖拽行高
      outsideClickDeselects: false, // 点击到表格以外,表格就失去focus
      mergeCells: true, //boolean表示是否可合并单元格,Array可以设置初始的合并单元格,如:[{row:0,col:0,rowspan:1,colspan:2}]
      minCols: 5, //最小列数
      minRows: CONSTANT.DEFAULT_MIN_ROWS, //最小行数
      colWidths: 100, // 列宽,number:表示全部一样,Array<number>:对应列宽
      rowHeights: 25, // 和上面同理
      render: (hot,TD, row, col, prop, value: any, cellProperties) => { 
          // 自定渲染方法
          // hot: handsontable的实例
          // 单元格td的dom对象
          // row,col: 行列,和程序员计数法一样从0开始
          // 单元格里面的值
          // cellProperties: 一些属性值
      } 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值