【问题标题】:Angular: ag grid navigateToNextRow Callback does not know thisAngular:ag grid navigateToNextRow Callback 不知道这个
【发布时间】:2020-01-31 17:32:36
【问题描述】:

按照 ag-grid https://www.ag-grid.com/javascript-grid-selection/#deep-dive-example-using-for-each-node 的示例,我想实现一种使用键盘错误更改行选择的方法。

这是我的代码:

 <ag-grid-angular #agGrid class="ag-theme-bootstrap" headerHeight="36" rowHeight="43"
    [rowData]="rowData | async" [columnDefs]="columnDefs" [rowSelection]="rowSelection" 
    [ [navigateToNextCell]="myNavigation"
    (gridReady)="onGridReady($event)" (rowDataChanged)="onRowDataUpdated()"
    >
  </ag-grid-angular>
  gridColumnApi;
  gridApi;

  onGridReady(params) {
    this.gridApi = params.api;
    this.gridColumnApi = params.columnApi;
    }

myNavigation(params) {
    console.log('nav');
    console.log(this.gridApi);
    var previousCell = params.previousCellDef;
    var suggestedNextCell = params.nextCellDef;

    var KEY_UP = 38;
    var KEY_DOWN = 40;
    var KEY_LEFT = 37;
    var KEY_RIGHT = 39;

    switch (params.key) {
      case KEY_DOWN:
        previousCell = params.previousCellDef;
        console.log(params);
        this.gridApi.forEachNode((node) => {
          if (previousCell.rowIndex + 1 === node.rowIndex) {
            node.setSelected(true);
          }
        });
        return suggestedNextCell;
      case KEY_UP:
        previousCell = params.previousCellDef;
        // set selected cell on current cell - 1
        this.gridApi.forEachNode((node) => {
          if (previousCell.rowIndex - 1 === node.rowIndex) {
            node.setSelected(true);
          }
        });
        return suggestedNextCell;
      case KEY_LEFT:
      case KEY_RIGHT:
        return suggestedNextCell;
      default:
        throw "this will never happen, navigation is always one of the 4 keys above";
    }
  }

问题是,在 MyNavigation 方法中我可以访问“this”。 我收到错误“无法访问未定义的 gridApi”。 当我将“this”记录到控制台时,我得到了未定义。有谁知道我做错了什么?

【问题讨论】:

    标签: angular ag-grid ag-grid-angular


    【解决方案1】:

    navigationToNextCell 之前的额外起始方括号可能会破坏它,但应该会引发模板解析错误。看起来 gridReady 事件没有触发。试图评论这个而不是回答,但它不会让我。

    同时使用 previousCellPosition 和 nextCellPosition 代替 previousCellDef 和 nextCellDef。

    您可能还需要使用

    将您的函数与构造函数中的控制器绑定
    this.myNavigation = this.myNavigation.bind(this);
    

    或者使用箭头函数。

    【讨论】:

    • 感谢您的出色回答,您在各个方面都是正确的。额外的方括号是一个错字,不在源代码中我真的需要使用 previousCellPosition 和 nextCellPosition 要使用它,我必须使用您提供的代码行。非常感谢
    • 太棒了!谢谢你的回答!!
    猜你喜欢
    • 1970-01-01
    • 2022-11-30
    • 2020-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-11
    • 2016-10-09
    • 2015-07-14
    相关资源
    最近更新 更多