javascript - 未捕获的类型错误 : Cannot read property 'setDomLayout' of undefined - Error when trying to make print function work with AG-Grid

标签 javascript reactjs ag-grid ag-grid-react

一直在尝试实现一个按钮,该按钮在单击时打印 ag-grid,如图所示 here :

但是,我在 api.setDomLayout('print') 行的 setPrinterFriendly 中不断收到错误消息,上面写着 Uncaught TypeError: Cannot read property 'setDomLayout' of undefined。我在这里错过了什么吗?

function setPrinterFriendly(api: any) {
  const eGridDiv = document.querySelector('.my-grid') as HTMLElement;
  eGridDiv.style.width = '';
  eGridDiv.style.height = '';
  api.setDomLayout('print');
}
function setNormal(api: any) {
  const eGridDiv = document.querySelector('.my-grid') as HTMLElement;
  eGridDiv.style.width = '600px';
  eGridDiv.style.height = '200px';
  api.setDomLayout(null);
}

export function onBtPrint(params: any) {
  const gridApi = params.api;
  setPrinterFriendly(gridApi);
  setTimeout(() => {
    print();
    setNormal(gridApi);
  }, 2000);
}
下面是我的主要类(class)项目。

class Items extends Component<any, ItemsState> {
  private gridApi: any;
  constructor(props: any) {
    super(props);
    this.state = {
      columnDefs: [{
        headerName: 'Store', field: 'store', sortable: true, filter: true, resizable: true, minWidth: 100,
      }, {
        headerName: 'Effective Date',
        field: 'effectiveDate',
        sortable: true,
        filter: true,
        resizable: true,
        minWidth: 150,
      },
         ...
  };
}
onGridReady(params: any) {
    params.api.expandAll();
  }


  onGridSizeChanged(params: any) {
    this.gridApi = params.api;
  }

  render() {
    const { rowData } = this.props;

    const {
      columnDefs, rowClassRules, statusBar,
    } = this.state;

    return (
      <div id="grid-wrapper" style={{ width: '100%', height: '100%' }}>
        <button onClick={onBtPrint.bind(null, this)}>Print</button>
        <div
          id="myGrid"
          style={{
            height: '100%',
            width: '98.5%',
            marginLeft: 13,
            overflow: 'scroll',
          }}
          className="ag-theme-balham my-grid"
        >
          <AgGridReact
            columnDefs={columnDefs}
            rowData={rowData}
            onGridReady={this.onGridReady}
            onGridSizeChanged={this.onGridSizeChanged}
            suppressMenuHide
            statusBar={statusBar}
            enableRangeSelection
            rowClassRules={rowClassRules}
            suppressHorizontalScroll={false}
          />
        </div>
      </div>
    );
  }
}

最佳答案

为了达到预期的结果,使用下面的选项将 params.api 分配给 this.gridApi onGridReady 方法

onGridReady={ params => this.gridApi = params.api } 

更多详情请引用此链接

https://www.ag-grid.com/react-getting-started/

关于javascript - 未捕获的类型错误 : Cannot read property 'setDomLayout' of undefined - Error when trying to make print function work with AG-Grid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57381438/

相关文章:

angular - 行的 Ag-Grid DOM

javascript - 修改 Angular 网格组件格式导出的列

javascript - 模仿 Array.from 方法的静态方法在 Javascript 中不起作用

javascript - 修复后如何在滚动条上居中 Bootstrap navbar-nav?

javascript - 将 undefined 传递给 React setState 是错误的吗?

javascript - 阐明 bind 在这种情况下的使用?

javascript - 如何在 ag-grid 中获取过滤行?

javascript - jQuery 选择器在修改 DOM 后不起作用

javascript - 如何设置 Dojo 对话框打开的位置?

javascript - Mocha + react : navigator is not defined